Собеседник написал текст в личный чат или в группу.
typeWebhook |
incomingMessageReceived |
typeMessage |
textMessage |
| Флаг настроек | incomingWebhook |
| Каналы | MAX, Telegram, WhatsApp, почта |
Пример
Мария пишет в личный чат MAX:
{
"typeWebhook": "incomingMessageReceived",
"instanceData": {"idInstance": 7100000001, "wid": "79990000001@c.us", "typeInstance": "v3", "channel": "max"},
"timestamp": 1791823658,
"idMessage": "117428955282341903",
"eventId": "msg:8695836:117428955282341903",
"senderData": {
"chatId": "8695836", "chatName": "Мария", "chatType": "user",
"sender": "8695836", "senderName": "Мария", "senderType": "user",
"senderContactName": "", "senderPhoneNumber": 0
},
"messageData": {
"typeMessage": "textMessage",
"textMessageData": {"textMessage": "Здравствуйте! Есть места на субботу?"}
}
}
Поля
| Поле | Описание |
|---|---|
idMessage |
id сообщения — для ответа цитатой (quotedMessageId), реакции, «прочитано» |
eventId |
ключ события — для защиты от повторной обработки |
senderData.chatId |
куда отвечать: передайте его в chatId метода sendMessage |
senderData.senderName |
имя собеседника в мессенджере |
messageData.textMessageData.textMessage |
текст сообщения |
Остальные поля конверта — в статье Формат уведомления.
В группе
chatId — группа, sender — участник, который написал:
"senderData": {
"chatId": "-80040066617372", "chatName": "3А · Робототехника", "chatType": "group",
"sender": "8695836", "senderName": "Мария", "senderType": "user",
"senderContactName": "", "senderPhoneNumber": 0
}
В других каналах
| Канал | chatId и sender |
typeInstance |
|---|---|---|
| MAX | "8695836" |
v3 |
| Telegram | "8617393401" |
telegram |
"79991234567@c.us" |
whatsapp |
|
| Почта | "maria@client.ru"; тема и цепочка — в emailMessageData, см. Письмо |
email |
Как обработать
Ответить на текст и не обработать одно сообщение дважды:
def on_notification(body: dict) -> None:
if body["typeWebhook"] != "incomingMessageReceived":
return
data = body["messageData"]
if data["typeMessage"] != "textMessage":
return
if already_seen(body["eventId"]): # ваша таблица обработанных событий
return
chat_id = body["senderData"]["chatId"]
text = data["textMessageData"]["textMessage"]
reply(chat_id, f"Получили: {text}", key=f"reply-{body['idMessage']}")
reply — вызов sendMessage с clientMessageId=key.
Что дальше
- Ответ цитатой — текст, который отвечает на другое сообщение.
- Файлы и альбомы — фото, документы, голосовые.
- receiveNotification — как забирать уведомления из очереди.
