Π‘ΠΎΡ‚ - это спСциализированный Ρ‚ΠΈΠΏ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Под Π½ΠΈΠΌ нСльзя Π·Π°Π»ΠΎΠ³ΠΈΠ½ΠΈΡ‚ΡŒΡΡ, Π° ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ Ρ‡Π΅Ρ€Π΅Π· InfoBot-Π°. Π‘ΠΎΡ‚ подчиняСтся ΠΎΠ±Ρ‰ΠΈΠΌ ΠΏΡ€Π°Π²Π°ΠΌ систСмы, Ρ‚.Π΅. Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² Ρ‡Π°Ρ‚ Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΈΡΠ°Ρ‚ΡŒ/Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ. Π‘ΠΎΡ‚Ρƒ пСрСдаСтся тСкст сообщСний ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊ Π½Π΅ΠΌΡƒ, Ссли Π·Π°Π΄Π°Π½ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ url. Π§ΠΈΡ‚Π°Ρ‚ΡŒ всС сообщСния Ρ‡Π°Ρ‚Π° Π±ΠΎΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΠΎΡ‚ΠΎΠΌ

CΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΌΠ΅Π½ΡΡ‚ΡŒ настройки Π±ΠΎΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΎΡ‚Π° InfoBot Π² своСм Info Chat-Π΅.

Для создания Π±ΠΎΡ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° @infobot new_bot helpbot ChatHelpBot, Π³Π΄Π΅:

  • ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° bot,
  • Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ΅ имя.

Π’ ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ сообщСниС с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ АПИ, Π³Π΄Π΅:

  • URL_KEY, ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 8 символов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ создании url Π±ΠΎΡ‚Π°
  • API_KEY, отбросим ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 20 символом ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ АПИ, для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ постов ΠΈ доступа ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ АПИ (Ρ‡Π΅Ρ€Π΅Π· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ X-APIToken).

Команда Π±ΠΎΡ‚Ρƒ

@infobot new_bot uniquenamebot VisibleNameBot

ΠžΡ‚Π²Π΅Ρ‚ Π±ΠΎΡ‚Π°

New bot @uniquenamebot created
Secret key: as3afgmkkmmepfbosv6o6hpph8s3fj2b9kpd0jutpts3i9ct67u
To start using bot you need setup callback url with command set_bot uniquenamebot url http://example.com/as3afgmk
Url must contain as3afgmk

API - as3afgmkkmmepfbosv6o6hpph8s3fj2b9kpd0jutpts3i9ct67u, Π³Π΄Π΅

  • URL_KEY = as3afgmk
  • API_KEY = 6hpph8s3fj2b9kpd0jutpts3i9ct67u
 as3afgmk kmmepfbosv6o 6hpph8s3fj2b9kpd0jutpts3i9ct67u
|--------|            |                               |
URL_KEY(8)            |                               |
|---------(20)--------|------------API_KEY------------|
{
    `X-APIToken`: '6hpph8s3fj2b9kpd0jutpts3i9ct67u'
}

Установка url, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ обращСния ΠΊ Π±ΠΎΡ‚Ρƒ

Команда @infobot set_bot helpbot url http://example.com/as3afgmk, гдС

  • helpbot - ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя Π±ΠΎΡ‚Π°,
  • url - рСдактируСмая опция,
  • http://example.com/as3afgmk - Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ, адрСс, ΠΊΡƒΠ΄Π° Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ сообщСния.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ информация ΠΏΠΎ Π±ΠΎΡ‚Ρƒ

Команда bot_info <unique_name> ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π±ΠΎΡ‚Π΅ , Π³Π΄Π΅

  • <unique_name> - ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя созданного Π±ΠΎΡ‚Π°

Команда Π±ΠΎΡ‚Ρƒ

bot_info uniquenamebot

ΠžΡ‚Π²Π΅Ρ‚ Π±ΠΎΡ‚Π°

@uniquenamebot
---
NAME: VisibleNameBot
RECEIVER URL:
    http://example.com/as3afgmk
    on this url you will receive messages from users
SENDING URL:
    POST https://api.verbosity.io/bot/message
    BODY {"key": "6hpph8s3fj2b9kpd0jutpts3i9ct67u", "text": "example text", "chat_id": <chat_id:int>}
    with this url you will be able to send messages to chats where your bot has access
KEY: as3afgmkkmmepfbosv6o6hpph8s3fj2b9kpd0jutpts3i9ct67u

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ доступных ΠΊΠΎΠΌΠ°Π½Π΄

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ² @infobot help

Команда Π±ΠΎΡ‚Ρƒ

@infobot help

ΠžΡ‚Π²Π΅Ρ‚ Π±ΠΎΡ‚Π°

bots - list your bots
new_bot <unique_name> <friendly name> - create new bot
set_bot <unique_name> <option> <value> - set option to bot
bot_new_key <unique_name> - generate new key
bot_info <unique_name> - bot details

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСний

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСний Π² Π½Π΅ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ Ρ‡Π°Ρ‚

POST /bot/message

Parameters

No parameters

Request body

{
  "key": "6hpph8s3fj2b9kpd0jutpts3i9ct67u"
  "chat_id": 37,  // int
  "reply_no": null,  // int or null
  "text": "@all test" // text, 10k symbols limit
}

Responses

200 OK

{
  "post_no": 123
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса

response = httpx.post("https://api.verbosity.io/bot/message", json={
  "key": "6hpph8s3fj2b9kpd0jutpts3i9ct67u",
  "text": "example text",
  "chat_id": 37,
    # "reply_no": 8 #ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° сообщСниС
  }
)

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСний Π² ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ Ρ‡Π°Ρ‚

По user_id

POST /msg/post/private

Parameters

No parameters

Request body

{
  "text": "some text",
  "user_id": 12
} 

Responses

200 OK

{
  "chat_id": 23,
  "post_no": 123
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса

headers = {
  "X-APIToken": "6hpph8s3fj2b9kpd0jutpts3i9ct67u"
}       

response = httpx.post("https://api.verbosity.io/msg/post/private", headers = headers, json={
  "text": "example text",
  "user_id": 12
    # "reply_no": 8 #ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° сообщСниС
  }
)

По email

POST /msg/post/private

Parameters

No parameters

Request body

{
  "text": "some text",
  "user_email": "user@example.com"
}

Responses

200 OK

{
  "chat_id": 23,
  "post_no": 123
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса

headers = {
  "X-APIToken": "6hpph8s3fj2b9kpd0jutpts3i9ct67u"
}       

response = httpx.post("https://api.verbosity.io/msg/post/private", headers = headers, json={
  "key": "6hpph8s3fj2b9kpd0jutpts3i9ct67u",
  "text": "example text",
  "user_email": "user@example.com"
    # "reply_no": 8 #ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° сообщСниС
  }
)

По ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ

POST /msg/post/private

Parameters

No parameters

Request body

{
  "text": "hello world!",
  "user_unique_name": "unique_name"
}

Responses

200 OK

{
  "chat_id": 23,
  "post_no": 123
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса

headers = {
  "X-APIToken": "6hpph8s3fj2b9kpd0jutpts3i9ct67u"
}       

response = httpx.post("https://api.verbosity.io/msg/post/private", headers = headers, json={
  "key": "6hpph8s3fj2b9kpd0jutpts3i9ct67u",
  "text": "example text",
  "user_unique_name": "unique_name"
    # "reply_no": 8 #ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° сообщСниС
  }
)

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ‡Π°Ρ‚

Π‘ΠΎΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ‡Π°Ρ‚ составным запросом с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ multipart/form-data, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉΡΡ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ HTML-Ρ„ΠΎΡ€ΠΌ

POST https://file.verbosity.io/new/upload

Parameters

No parameters

Request multipart/form-data

chat_id = 37 &
size = {file_size}

data = {file_data}

Responses

200 OK

{
  "guid": "2031c0eb0ff045c69dbbd9f9624f307b"
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса

headers = {"X-APIToken": "6hpph8s3fj2b9kpd0jutpts3i9ct67u"}
payload = {"chat_id": 70737, "size": len((open("example.txt", "rb")).read())}
data = {"data": open("example.txt", "rb")}

response = httpx.post("https://file.verbosity.io/new/upload", headers=headers, data=payload, files=data)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса curl

  -H "X-APIToken: ..." 
  -X POST 
  -F "size=`wc -c < ./ansible.log`" 
  -F "chat_id=37" 
  -F "data=@./ansible.log" 
https://file.verbosity.io/new/upload;

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок

Ошибки доступа

{
  "code": "access_deny"
  "message": "...some text..."
}

Ошибки Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ

МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎ Ρ„Π»Π°Π³Ρƒ "tamtam_response_api": true

{
  "tamtam_response_api": true,
  "codes": {"<field_name>|non_field": "str_code"},
  "field_errors": {"<field_name>|non_field": "str_message"}
  "extra": {}, // optioanl
  "error": "str_message"
}

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сообщСний

На адрСс установлСнный ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ @infobot set_bot helpbot url http://example.com/as3afgmk

POST-ΠΎΠΌ отправляСтся сообщСниС Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ json

{
  // ΠΊΡ‚ΠΎ обратился ΠΊ Π±ΠΎΡ‚Ρƒ
  "user_id": 12,  // int
  "user_unique_name": "real_user",  // str or null, unique_name ΠΏΠΎ user_id
  // Π³Π΄Π΅ Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ (пост, Ρ‡Π°Ρ‚, ΠΊΠΎΠΌΠ°Π½Π΄Π°)
  "post_no": 11,  // int
  "chat_id": 21,  // int
  "organization_id": null,  // null or int
  // Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ написано Π±ΠΎΡ‚Ρƒ
  "text": "some text",  // str
  "text_parsed": [{"type": "text", "value": "some text"}],  // list[dict], распознанныС Π±Π»ΠΎΠΊΠΈ форматирования тСкста
  // Ссли сообщСниС содСрТит ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ пост, Ρ‚ΡƒΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ ΠΈ тСкст этого поста
  "reply_no": 7,  // optional, int
  "reply_text": "some text",  // optional, str
  // Ссли сообщСниС содСрТит Ρ„Π°ΠΉΠ», Ρ‚ΡƒΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ guid ΠΈ имя Ρ„Π°ΠΉΠ»Π°
  "file_guid": "5d9d966e0dcc4cb28a86acd79323cf2b",  // optional, str (hex)
  "file_name": "example.txt",  // optional, str
  // список ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² (Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Π΄ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ поста, ΠΊΡƒΠ΄Π° ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹, Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ слСдуСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ guid ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π±Ρ‹Ρ‚ΡŒ нСдоступСн)
  "attachments": null,   // optional, list[str] - список guid Ρ„Π°ΠΉΠ»ΠΎΠ²
}

ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ X-Signature - подпись ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

BKEY = to_bytes(int("<key>", 32))

def _make_signature(body: str):
    return str(base64.b64encode(
        hmac.new(BKEY, bytes(body, "utf8"), digestmod=hashlib.sha256).digest()
    ), "utf8")

if request.headers["x-signature"] != _make_signature(await request.text()):
    print("Check failed")

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Π±ΠΎΡ‚Π° (bot actions)

Π’ случаях ΠΊΠΎΠ³Π΄Π° Π±ΠΎΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ нСбольшоС число ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ»ΠΈ трСбуСтся Π²Ρ‹Π±ΠΎΡ€ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² - Π²Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слишком слоТным ΠΈ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π‘ΠΎΡ‚, ΠΏΠΎΠΌΠΈΠΌΠΎ входящих сообщСний ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (actions), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΠΎΡ‚ сам Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ динамичСски Π² своих сообщСниях Π² Π²ΠΈΠ΄Π΅ ссылок ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° (Π²Π°Π»ΠΈΠ΄Π½Ρ‹Ρ… url):

bot://{action}?title={title}[&{key}={value}]
  • action: <str: a-z_> - имя ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
  • title: - тСкст, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π² сообщСнии
  • key, value: - Π»ΡŽΠ±Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • общая Π΄Π»ΠΈΠ½Π½Π° строки Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 1024 символов, строки слСдуСт ΠΏΡ€ΠΎΠ³Π½Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· url-quoting

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ ссылку (ΠΏΠΎΠ·ΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ отрисовки), Π½Π°ΠΆΠ°Π² Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΠΎΡ‚Ρƒ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ запрос с подписанными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ:

POST https://{bot-server-url}/act
{
  "user_id": <int>,  // ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΆΠ°Π» Π½Π° action-ссылку
  "chat_id": <int>,  // Ρ‡Π°Ρ‚ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹Π·Π²Π°Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°
  "post_no": <int>,  // пост Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΠΎΡ‚ΠΎΠΌ Π±Ρ‹Π»Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°
  "organization_id": <int> | null  // ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ‡Π°Ρ‚
  "action": <str>  // имя ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
  "params": {<str>: <str>}  // всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ послС ?  
}

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ:

  • action-ссылки ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Π±ΠΎΡ‚ΠΎΠ² (ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ)
  • Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ Π½Π° action-ссылку Π½Π΅ сопровоТдаСтся постом ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ для всСх участников Ρ‡Π°Ρ‚Π°
  • action-ссылки ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΆΠΈΠΌΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·, Π² Π³Ρ€ΡƒΠΏΠΏΠΎΠ²Ρ‹Ρ… Ρ‡Π°Ρ‚Π°Ρ… ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΆΠ°Ρ‚ΡŒ любой участник
  • title ΠΈ ui Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ слуТСбныС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ВСкст сообщСния ΠΎΡ‚ Π±ΠΎΡ‚Π°

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ доску для размСщСния ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:
bot://set_default_board?title=Team%20board&board_id=54623
bot://set_default_board?title=My%20board&board_id=324512
bot://set_default_board?title=Main%20board&board_id=83924

Запрос Π½Π° сСрвСр Π±ΠΎΡ‚Π° ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ссылку My board ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ (user#132)

POST https://example.com/as3afgmk/act

{
  "user_id": 132,
  "chat_id": 11768,
  "post_no": 45876,
  "organization_id": null,
  "action": "set_default_board",
  "params": {
    "title": "My%20board",
    "board_id": "324512"
  }
}

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ АПИ

ΠŸΡ€ΠΎΠ±Π½Π°Ρ OpenApi3 спСцификация (ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ отступлСния Π² ΠΎΡ‚Π²Π΅Ρ‚Π°Ρ…, ValidationError ΠΌΠ°Π»ΠΎ описан). МоТно ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² https://editor.swagger.io/ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

НиТС прСдставлСнны Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· API

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ ΠΏΠΎ id

Зная id ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π΅ΠΌ

GET /core/user?ids=11,12,15.

Parameters

ids - id ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

Request body

No body

Responses

200 OK

{
  "users": [
    {
      "id": 0,
      "name": "string",
      "unique_name": "string",
      "info": "string",
      "info_parsed": [
        {}
      ],
      "deleted": true,
      "active": true,
      "time_updated": "string",
      "time_created": "string",
      "is_bot": true,
      "organizations": [
        0
      ]
    }
  ]
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса

ids = ","join([11, 12, 15])

url = "https://api.verbosity.io/core/user?ids={ids}"
        
headers = {
  "X-APIToken": "6hpph8s3fj2b9kpd0jutpts3i9ct67u",
}  
        
response = httpx.get(url, headers = headers)

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ ΠΏΠΎ unique name

Зная unique name ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π΅ΠΌ

GET /core/user?unames=user0,user1,user2.

Parameters

unique name - ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

Request body

No body

Responses

200 OK

{
  "users": [
    {
      "id": 0,
      "name": "string",
      "unique_name": "string",
      "info": "string",
      "info_parsed": [
        {}
      ],
      "deleted": true,
      "active": true,
      "time_updated": "string",
      "time_created": "string",
      "is_bot": true,
      "organizations": [
        0
      ]
    }
  ]
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса

unames = ","join(['user0','user1','user2'])
'
url = "https://api.verbosity.io/core/user?unames={unames}"
        
headers = {
  "X-APIToken": "6hpph8s3fj2b9kpd0jutpts3i9ct67u",
}  
        
response = httpx.get(url, headers = headers)

Π§Π°Ρ‚Ρ‹

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ всСх доступных Ρ‡Π°Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π² 2 ΠΏΡ€ΠΈΠ΅ΠΌΠ°

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ id Ρ‡Π°Ρ‚ΠΎΠ² (нСзависимо ΠΎΡ‚ статуса видимости)

GET /core/chat/sync

Parameters

No parameters

Request body

No body

Responses

200 OK

{
  "chats": [
    0
  ]
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса


url = "https://api.verbosity.io/core/chat/sync"
        
headers = {
  "X-APIToken": "6hpph8s3fj2b9kpd0jutpts3i9ct67u"
}  
        
response = httpx.get(url, headers = headers)

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π°Ρ‚ΠΎΠ² ΠΏΠΎ id

GET /core/chat?ids=11,12,15.

Parameters

ids - id Ρ‡Π°Ρ‚ΠΎΠ²

Request body

No body

Responses

200 OK

{
  "chats": [
    {
      "id": 0,
      "title": "string",
      "description": "string",
      "organization_id": 0,
      "posts_live_time": 0,
      "two_step_required": true,
      "history_mode": "string",
      "org_visible": true,
      "allow_api": true,
      "read_only": true,
      "posts_count": 0,
      "pm": true,
      "e2e": true,
      "time_created": "string",
      "time_updated": "string",
      "time_edited": "string",
      "author_id": 0,
      "tnew": true,
      "adm_flag": true,
      "custom_title": "string",
      "is_favorite": true,
      "inviter_id": 0,
      "tshow": true,
      "user_time_edited": "string",
      "history_start": 0,
      "pinned": [
        0
      ],
      "member_ids": [
        0
      ],
      "admin_ids": [
        0
      ],
      "group_ids": [
        0
      ],
      "guests": [
        0
      ],
      "thread_users": [
        0
      ],
      "thread_admins": [
        0
      ],
      "thread_groups": [
        0
      ],
      "last_msg": "string",
      "last_read_post_no": 0,
      "last_msg_author_id": 0,
      "last_msg_author": "string",
      "last_msg_bot_name": "string",
      "last_msg_text": "string"
    }
  ]
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса

ids = ","join([11, 12, 15])

url = "https://api.verbosity.io/core/chat?ids={ids}"
        
headers = {
  "X-APIToken": "6hpph8s3fj2b9kpd0jutpts3i9ct67u"
}  
        
response = httpx.get(url, headers = headers)

Π‘ΠΎΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ/Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ/ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Ρ‡Π°Ρ‚Ρ‹ Π² соотвСтствии со своими ΠΏΡ€Π°Π²Π°ΠΌΠΈ. Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ состава участников Ρ‡Π°Ρ‚Π° Π±ΠΎΡ‚Π°ΠΌ Π½Π΅ доступно.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌΠΈ Ρ‡Π°Ρ‚Π°ΠΌΠΈ, Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ АПИ POST /core/chat/pm/{user_id}, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ id ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ³ΠΎ Ρ‡Π°Ρ‚Π°, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ»ΠΈ вновь созданного.

Π‘ΠΎΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ/Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π²/ΠΈΠ· Ρ‡Π°Ρ‚ΠΎΠ², ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ/ΡƒΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΠ· ΠΈΠ·Π±Ρ€Π°Π½Π½Ρ‹Ρ…, Ρ„ΠΎΡ€ΠΊΠ°Ρ‚ΡŒ.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ всСх доступных ΠΊΠΎΠΌΠ°Π½Π΄, ΠΌΠΎΠΆΠ½ΠΎ Π² 2 ΠΏΡ€ΠΈΠ΅ΠΌΠ°

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ id ΠΊΠΎΠΌΠ°Π½Π΄

GET /core/org/sync

Parameters

No parameters

Request body

No body

Responses

200 OK

{
  "ids": [
    0
  ]
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса

url = "https://api.verbosity.io/core/org/sync"
        
headers = {
  "X-APIToken": "6hpph8s3fj2b9kpd0jutpts3i9ct67u"
}  
        
response = httpx.get(url, headers = headers)

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠΎ id

GET /core/org?ids=11,12,15.

Parameters

ids - id ΠΊΠΎΠΌΠ°Π½Π΄

Request body

No body

Responses

200 OK

{
  "orgs": [
    {
      "id": 0,
      "slug": "string",
      "title": "string",
      "description": "string",
      "description_parsed": [
        {}
      ],
      "email_domain": "string",
      "time_created": "string",
      "time_updated": "string",
      "two_step_required": true,
      "default_chat_id": 0,
      "is_member": true,
      "is_admin": true,
      "state": "string",
      "inviter_id": 0,
      "guests": [
        0
      ],
      "users": [
        0
      ],
      "admins": [
        0
      ],
      "groups": [
        0
      ]
    }
  ]
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса

ids = ","join([11, 12, 15])

url = "https://api.verbosity.io/core/org?ids={ids}"
        
headers = {
  "X-APIToken": "6hpph8s3fj2b9kpd0jutpts3i9ct67u"
}  
        
response = httpx.get(url, headers = headers)

Π’Π°ΠΊ ΠΆΠ΅ Π±ΠΎΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ/Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ/ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² соотвСтствии со своими ΠΏΡ€Π°Π²Π°ΠΌΠΈ. Π’Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡŽ ΠΈ ΠΏΠΎΠΊΠΈΠ΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ состава участников Ρ‡Π°Ρ‚Π° Π±ΠΎΡ‚Π°ΠΌ Π½Π΅ доступно.