Собеседник поделился контактом — своим или чужим.
typeWebhook |
incomingMessageReceived |
typeMessage |
contactMessage |
| Флаг настроек | incomingWebhook |
| Каналы | MAX, Telegram, WhatsApp |
Пример
Мария прислала в Telegram контакт Олега:
{
"typeWebhook": "incomingMessageReceived",
"instanceData": {"idInstance": 7100000001, "wid": "79990000001@c.us", "typeInstance": "telegram", "channel": "telegram"},
"timestamp": 1791823780,
"idMessage": "4817",
"eventId": "msg:8617393401:4817",
"senderData": {
"chatId": "8617393401", "chatName": "Мария", "chatType": "user",
"sender": "8617393401", "senderName": "Мария", "senderType": "user",
"senderContactName": "", "senderPhoneNumber": 0
},
"messageData": {
"typeMessage": "contactMessage",
"contactMessageData": {
"chatId": "8600000002",
"urlAvatar": "",
"phoneNumber": 79997654321,
"displayName": "Олег Петров",
"vcard": "",
"forwardingScore": 0,
"isForwarded": false
}
}
}
Поля
| Поле | Описание |
|---|---|
contactMessageData.chatId |
адрес контакта в этом мессенджере — по нему можно написать sendMessage. "", если контакт не пользуется мессенджером |
contactMessageData.displayName |
имя в карточке |
contactMessageData.phoneNumber |
телефон числом, только цифры; 0, если площадка его не дала |
contactMessageData.urlAvatar |
ссылка площадки на фото контакта; "", если нет |
contactMessageData.vcard |
карточка vCard текстом — только WhatsApp |
contactMessageData.isForwarded, forwardingScore |
контакт переслан — см. Ссылка и пересланное |
Остальные поля конверта — в статье Формат уведомления.
В других каналах
| Канал | chatId |
phoneNumber |
urlAvatar |
vcard |
|---|---|---|---|---|
| MAX | id контакта в MAX, "1111111" |
0 — MAX телефон не отдаёт |
ссылка MAX на фото | "" |
| Telegram | id в Telegram, если контакт там есть | есть | "" |
"" |
"79997654321@c.us" |
есть | "" |
есть |
Контакт в WhatsApp:
"contactMessageData": {
"chatId": "79997654321@c.us",
"urlAvatar": "",
"phoneNumber": 79997654321,
"displayName": "Олег Петров",
"vcard": "BEGIN:VCARD\nVERSION:3.0\nFN:Олег Петров\nTEL;type=CELL;waid=79997654321:+7 999 765-43-21\nEND:VCARD",
"forwardingScore": 0,
"isForwarded": false
}
Из нескольких контактов в одном сообщении WhatsApp приходит первый.
Как обработать
Сохранить контакт в CRM и, если есть адрес в мессенджере, связать с ним:
def on_contact(body: dict) -> None:
data = body["messageData"]
if data["typeMessage"] != "contactMessage":
return
card = data["contactMessageData"]
phone = str(card["phoneNumber"]) if card["phoneNumber"] else None
save_contact(
name=card["displayName"],
phone=phone,
chat_id=card["chatId"] or None, # адрес для sendMessage в этом канале
channel=body["instanceData"]["channel"],
shared_by=body["senderData"]["chatId"],
)
phoneNumber — число: в JavaScript безопасно до 15 цифр, телефоны в этот предел укладываются.
Что дальше
- sendContact — отправить контакт.
- checkAccount — проверить, есть ли у номера аккаунт в мессенджере.
- Геопозиция — уведомление о точке на карте.
