# Общение с АПИ Павла
## Суть происходящего
- Павел делает рассылку стартового сообщения по списку наших клиентов
- Когда какой-то клиент отвечает, вы пересылаете сообщение на наш ИИ
- Наш ИИ минутку думает, и отдает ответ на бекенд Павла
- бекенд Павла пересылает сообещние в телеграм
## API Простым языком
- Когда вы послали стартовое сообщение клиенту, ничего нам слать не нужно
- Когда клиент отвечает, вы дергаете /handle_tasks ручку
Дальше два варианта
либо вы вызываете /wait_for_new_message каждые несколько секунд которое отдает все новые сообщения из чата
либо вы вызываете /status обработки сообщения каждые несколько секунд
для вебчата, мы используем 1й способ, но поскольку у вас будет тысячи чатов, вы не можете ждать новые сообщение по каждому из них поэтому предлагаю вам 2й способ, когда вы на каждое сообщение от юзера начинаете ждать, когда на него прилетит ответ
## Тонкие моменты
Если клиент пишет несколько сообщений подряд, то они обрабатываются разом и бот отвечает на них всех одним сообщением
## Примеры вызова АПИ
### POST /handle_tasks
- user_id: str|int required
- chat_id: str|int required (for private chats can be equal to user_id)
- channel: str (можно написать "telegram")
- username: str required, для тех у кого нет username можно сделать str(user_id)
- user_message: str required (пока непонятно что делать если пришлют изображение пока берем только текст)
- steps: list, всегда передаем одно и то же
```
"steps": [{"field":"answer","input_getter":"getter_prompt","input_getter_kwargs":{"prompt_var":"ASSISTANT_PROMPT"},"no_hallucinations":true}]
}'
```
### GET /wait_for_new_message/<chat_id>/<last_message_id>
отдает следующее сообщение (только по одному)
### POST https://dionysus-ai.cloud:2083/pavel/status
- msgId: str required (берется то что вернуло handle_tasks)
## Полный пример работы
### Первое сообщение
```
curl -X POST 'https://dionysus-ai.cloud:2083/pavel/handle_tasks' \
--header 'Content-Type: application/json' \
--data '{"user_id": 77700005,
"chat_id": 77700005,
"channel": "telegram",
"username": "VladimirSmelov",
"user_message": "Привет",
"steps": [{"field":"answer","input_getter":"getter_prompt","input_getter_kwargs":{"prompt_var":"ASSISTANT_PROMPT"},"no_hallucinations":true}]
}'
```
```
{"msgId":"pavel-api:msg-77700004-1","msgPeriod":0,"msgStatus":"processing","msgTimestamp":1710609497,"rid":"1710609497151852320"}
```
### Ждем ответ 1м способом
GET /wait_for_new_message/<chat_id>/<last_message_id>
curl -X GET 'https://dionysus-ai.cloud:2083/pavel/wait_for_new_message/77700005/0'
отдает следующее сообщение (только по одному)
```
vsm@DESKTOP-N692THD:~$ curl -X GET 'https://dionysus-ai.cloud:2083/pavel/wait_for_new_message/77700005/0'
{"message":{"chat_id":77700005,"content":"\u041f\u0440\u0438\u0432\u0435\u0442","metadata":{},"msg_id":"pavel-api:db-msg-77700005-1","timestamp":1710610402.0637288,"user_id":77700005},"status":"ok"}
vsm@DESKTOP-N692THD:~$
vsm@DESKTOP-N692THD:~$ curl -X GET 'https://dionysus-ai.cloud:2083/pavel/wait_for_new_message/77700005/1'
{"message":{"chat_id":77700005,"content":"\u041f\u0440\u0438\u0432\u0435\u0442! \ud83d\udc4b\n\n\u042f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Alex Villas. \n(www.alex-villas.com)\n\u041c\u044b \u044f\u0432\u043b\u044f\u0435\u043c\u0441\u044f \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0438\u043c \u0445\u043e\u043b\u0434\u0438\u043d\u0433\u043e\u043c \u043d\u0430 \u0411\u0430\u043b\u0438 \u0438 \u0443\u0436\u0435 9 \u043b\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e\u043c \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0439 \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u044c\u044e.\n\u042f \u0438\u0437\u0443\u0447\u0438\u043b \u0432\u0430\u0448 \u043f\u0440\u043e\u0444\u0438\u043b\u044c, \u0438 \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u044e\u043d\u0438\u0442\u044b \u0441\u0432\u043e\u0438\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c. \n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u0430\u0433\u0435\u043d\u0442\u043e\u0432 \u0432 \u0414\u0443\u0431\u0430\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b 180 000$ \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0434\u0435\u043b\u043a\u0438 \ud83d\udd1d\n\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 - \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u043e\u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0434\u043b\u044f \u0432\u0430\u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u0435.\n\n\u0425\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u0432\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u043e\u043c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0438?","metadata":{},"msg_id":"pavel-api:db-msg-77700005-2","timestamp":1710610410.4573534,"user_id":"ai"},"status":"ok"}
```
### Ждем ответ 2м способом
curl -X POST 'https://dionysus-ai.cloud:2083/pavel/status' \
--header 'Content-Type: application/json' \
--data '{"msgId": "pavel-api:msg-77700005-1"}'
{"answer":"\u041f\u0440\u0438\u0432\u0435\u0442! \ud83d\udc4b\n\n\u042f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Alex Villas. \n(www.alex-villas.com)\n\u041c\u044b \u044f\u0432\u043b\u044f\u0435\u043c\u0441\u044f \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0438\u043c \u0445\u043e\u043b\u0434\u0438\u043d\u0433\u043e\u043c \u043d\u0430 \u0411\u0430\u043b\u0438 \u0438 \u0443\u0436\u0435 9 \u043b\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e\u043c \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0439 \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u044c\u044e.\n\u042f \u0438\u0437\u0443\u0447\u0438\u043b \u0432\u0430\u0448 \u043f\u0440\u043e\u0444\u0438\u043b\u044c, \u0438 \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u044e\u043d\u0438\u0442\u044b \u0441\u0432\u043e\u0438\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c. \n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u0430\u0433\u0435\u043d\u0442\u043e\u0432 \u0432 \u0414\u0443\u0431\u0430\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b 180 000$ \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0434\u0435\u043b\u043a\u0438 \ud83d\udd1d\n\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 - \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u043e\u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0434\u043b\u044f \u0432\u0430\u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u0435.\n\n\u0425\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u0432\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u043e\u043c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0438?","msgChanged":"false","msgFull":"\u041f\u0440\u0438\u0432\u0435\u0442","msgId":"pavel-api:msg-77700005-1","msgPeriod":139,"msgStatus":"ok","msgUsed":"\u041f\u0440\u0438\u0432\u0435\u0442","parts":[],"rid":"1710610541323980940"}
### Юзер пишет 3 коротких сообщения пачкой
```
curl -X POST 'https://dionysus-ai.cloud:2083/pavel/handle_tasks' \
--header 'Content-Type: application/json' \
--data '{"user_id": 77700005,
"chat_id": 77700005,
"channel": "telegram",
"username": "VladimirSmelov",
"user_message": "Классно!",
"steps": [{"field":"answer","input_getter":"getter_prompt","input_getter_kwargs":{"prompt_var":"ASSISTANT_PROMPT"},"no_hallucinations":true}]
}'
curl -X POST 'https://dionysus-ai.cloud:2083/pavel/handle_tasks' \
--header 'Content-Type: application/json' \
--data '{"user_id": 77700005,
"chat_id": 77700005,
"channel": "telegram",
"username": "VladimirSmelov",
"user_message": "Да",
"steps": [{"field":"answer","input_getter":"getter_prompt","input_getter_kwargs":{"prompt_var":"ASSISTANT_PROMPT"},"no_hallucinations":true}]
}'
curl -X POST 'https://dionysus-ai.cloud:2083/pavel/handle_tasks' \
--header 'Content-Type: application/json' \
--data '{"user_id": 77700005,
"chat_id": 77700005,
"channel": "telegram",
"username": "VladimirSmelov",
"user_message": "Расскажи мне!",
"steps": [{"field":"answer","input_getter":"getter_prompt","input_getter_kwargs":{"prompt_var":"ASSISTANT_PROMPT"},"no_hallucinations":true}]
}'
```
```
{"msgId":"pavel-api:msg-77700005-2","msgPeriod":0,"msgStatus":"processing","msgTimestamp":1710610708,"rid":"1710610708861110022"}
{"msgId":"pavel-api:msg-77700005-2","msgPeriod":0,"msgStatus":"processing","msgTimestamp":1710610708,"rid":"1710610709603231417"}
{"msgId":"pavel-api:msg-77700005-2","msgPeriod":0,"msgStatus":"processing","msgTimestamp":1710610708,"rid":"1710610710392744726"}
```
msgId одно и то же если пачкой быстро одно за другим несколько сообщений послать
```
vsm@DESKTOP-N692THD:~$ curl -X POST 'https://dionysus-ai.cloud:2083/pavel/status' --header 'Content-Type: application/json' --data '{"msgId": "pavel-api:msg-77700005-2"}'
{"answer":"\u041e\u0442\u043b\u0438\u0447\u043d\u043e! \ud83d\ude0a\n\n\u041c\u044b \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u043e\u043c Alex Villas \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0434\u043e\u0445\u043e\u0434 \u043e\u0442 \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0430 \u0411\u0430\u043b\u0438. \u041d\u0430\u0448\u0438 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0434\u043e\u0445\u043e\u0434\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043d\u0430 \u0432\u0441\u0435\u0445 \u044d\u0442\u0430\u043f\u0430\u0445 \u0441\u0434\u0435\u043b\u043a\u0438.\n\n\u0412\u0430\u0448\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u0441\u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u044f \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0436\u0435\u043b\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0441\u0442 \u043d\u0430 \u043f\u043b\u0430\u043d\u0435\u0442\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u0445\u043e\u0434 \u043e\u0442 \u0430\u0440\u0435\u043d\u0434\u044b. \u041c\u044b \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0435\u043a\u0442\u0440 \u0443\u0441\u043b\u0443\u0433, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u044c\u044e, \u0440\u0435\u043a\u043b\u0430\u043c\u0443, \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 OTA-\u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u0430\u043c\u0438 \u0438 \u0432\u044b\u043f\u043b\u0430\u0442\u0443 \u0434\u0438\u0432\u0438\u0434\u0435\u043d\u0434\u043e\u0432.\n\n\u0411\u0443\u0434\u0435\u0442\u0435 \u043b\u0438 \u0432\u044b \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u044b \u0441\u0442\u0430\u0442\u044c \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u043e\u043c \u0438\u043b\u0438 \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043f\u043e \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0443 \u0438\u043b\u0438 \u043d\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0435?","msgChanged":"true","msgFull":"\u041a\u043b\u0430\u0441\u0441\u043d\u043e! \u0414\u0430 \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0438 \u043c\u043d\u0435!","msgId":"pavel-api:msg-77700005-2","msgPeriod":78,"msgStatus":"ok","msgUsed":"\u041a\u043b\u0430\u0441\u0441\u043d\u043e!","parts":[],"rid":"1710610786064076004"}
```