Как получить имя собеседника в интеграциях?#
Содержание#
- Почему не всегда доступно имя?
- Как получить имя собеседника?
- Как инициировать чат, если имени ещё нет?
- Заключение
Почему не всегда доступно имя?#
Из-за политики безопасности WhatsApp имя пользователя может быть недоступно в некоторых случаях:
- Если вы пишете первым, и номер не сохранён в контактах;
- Если собеседник не ответил на ваше сообщение;
- Если номер не фигурирует в истории переписки (нет чата).
В таких случаях WhatsApp может не предоставлять информацию о профиле, включая имя.
Как получить имя собеседника?#
GetContacts#
Метод GetContacts
позволяет получить список номеров, добавленных в контакты, или тех, с кем у вас уже был чат.
- Если с номером уже есть чат или номер сохранен в контактах, он будет доступен через этот метод;
- В ответе можно найти поле
name
— это имя, указанное пользователем в WhatsApp; - Если имя недоступно, возвращается только номер или пустое поле.
Пример структуры ответа:
{
"id": "79876543210@c.us",
"name": "Имя",
"contactName": "Имя контакта",
"type": "user"
}
Важно!
Если вы хотите, чтобы контакт отобразился при запросе, GetContacts
, нужно:
- либо сохранить номер вручную в контакты,
- либо чтобы с номером был хотя бы один чат (входящее или исходящее сообщение).
GetContactInfo#
Метод GetContactInfo
позволяет получить данные по конкретному номеру телефона.
В ответе может быть доступно:
name
— имя профиля (если доступно),contactName
— имя, указанное в контакнтной книге (если номер сохранён в контакты),- другие данные о профиле (аватар, электронная почта и др.)
Пример структуры ответа:
{
"avatar": "https://pps.whatsapp.net/v/...",
"name": "Имя",
"contactName": "Имя контакта",
{...}
}
GetGroupData#
Если вы работаете с группами, метод GetGroupData
поможет получить название группы, из которой пришло сообщение.
Пример структуры ответа:
{
"groupId": "12345678909876543210@g.us",
"owner": "79876543210@c.us",
"subject": "GREEN-API Group",
{...}
}
Обработка уведомлений#
Один из самых надежных способов получить имя — обрабатывать входящие уведомления.
Когда вы получаете входящее сообщение, в теле уведомления может быть поле с именем отправителя. Это имя отображается даже в случае, если вы не сохранили контакт, при условии, что пользователь написал первым.
Пример структуры уведомления:
{
"typeWebhook": "incomingMessageReceived",
"instanceData": {...},
"timestamp": 1111111111,
"idMessage": "F7AEC1B7086ECDC7E6E45923F5EDB825",
"senderData": {
"chatId": "79001234567@c.us",
"sender": "79001234567@c.us",
"chatName": "Иван",
"senderName": "Иван",
"senderContactName": "Иван Царевич"
},
"messageData": {...}
}
Важно!
Имя в senderName
может быть недоступно, если вы писали первым и пользователь не ответил.
Как инициировать чат, если имени ещё нет?#
Если необходимо начать диалог с пользователем, у которого нет чата и контакт не сохранен:
- Используйте
методы отправки
с указанием номера в формате chatId ({номер}@c.us
). - После этого чат создастся, но имя не гарантированно появится — оно отобразится только после ответа пользователя.
Заключение#
Если вы строите систему CRM или бота, которые должна "запоминать" имена пользователей, рекомендуется следующий алгоритм:
- При получении входящего сообщения — сохраняйте
senderName
локально; - При отправке сообщений первым — не рассчитывайте на наличие имени сразу;
- Когда получите ответ — обновите имя в своей базе.