POST graph.user.messages

Create new messages, modify chats, dialogs and their participants

Content-Type: application/json;charset=utf-8 header should be specified for all Graph API POST requests

This method allows you to do following actions:

  • create new chat messages;
  • modify chat / dialog state;
  • chat participants management;
  • notify other chat participants about your actions and state.

Request example

https://api.ok.ru/graph/me/messages/chat:C3ecb9d02a600
   ?access_token=tkn18YdUJZe:CQABPOJKAKEKEKEKE

Actions over chat state

You can edit following chat data:

  • chat title;
  • chat logo.

Example request to edit chat title:

{
  "recipient":{"chat_id":"chat:C3ecb9d02a600"},           /* Chat ID in a chat:id format */
  "chat_control":{
    "title":"This is our chat now"                        /* New chat title */
  }
}

Example request to edit chat icon:

{
  "recipient":{"chat_id":"chat:C3ecb9d02a600"},                 /* Chat ID in a chat:id format */
  "chat_control":{
    "icon":{"url":"https://and.su/tamtam/icon128.png"}          /* New icon image URL. Png or img formats only */
  }
}

Participants management

Following actions can be done with / or by chat participants:

  • add new chat participant;
  • remove chat participant;
  • leave chat by current user

Example request to add new chat participant:

{
  "recipient":{"chat_id":"chat:C3ecb9d02a600"},         /* Chat ID in a chat:id format */
  "chat_control":{
    "add_members":[                                     /* Array of user to add */
      {"user_id":"user:123456789012"},                  /* User ID in a user:id format */
      {"user_id":"user:123456789021"}
    ]
  }
}

Example request to remove chat participant:

{
  "recipient":{"chat_id":"chat:C3ecb9d02a600"},             /* Chat ID in a chat:id format */
  "chat_control":{
    "remove_member":{"user_id":"user:123456789012"}         /* User ID in a user:id format */
  }
}

Example request to leave chat by user:

{
  "recipient":{"chat_id":"chat:C3ecb9d02a600"},             /* Chat ID in a chat:id format */
  "chat_control":{
    "leave":"true"                                          
  }
}

Sending messages

This is a key feature of this method.

To create a new message you need to send a POST-payload data with a message object which is similar to an object that you can get with me/messages/get method.

Text message example:

{
  "recipient":{"chat_id":"chat:C3ecb9d02a600"},         /* Chat ID in a chat:id format */
  "message":{                                           /* Message content */
    "text":"Hello"                                      /* Message text */
  }
}

Sending messages with attachments

A message with image and file attachments can be sent. Maximum number of attachments is 5.

A message with an IMAGE attachment can be sent like this:

{
  "recipient":{"chat_id":"chat:C3ecb9d02a600"},                     /* Chat ID in a chat:id format */
  "message":{                                                       /* Message content */
    "attachment":{
      "type":"IMAGE",
      "payload":{"url":"https://st.mycdn.me/res/i/ok_logo.png"}     /* Resource URL */
    }
  }
}

A message with a FILE attachment can be sent like this:

{
  "recipient":{"chat_id":"chat:C3ecb9d02a600"},                     /* Chat ID in a chat:id format */
  "message":{                                                       /* Message content */
    "attachment":{
      "type":"FILE",
      "payload":{"token":"tokenString"}                             /* Temporary file identifier */
    }
  }
}

More info about file uploading can be found here - graph.user.fileUploadUrl

Current user state

Current user can inform other chat participant about some of his actions or his state:

  • mark all messages as seen - mark_seen;
  • user us typing a new message - typing_on;
  • user is sending new file (video, audio, image) - sending_photo.

Example request:

{
  "recipient":{"chat_id":"chat:C3ecb9d02a600"},     /* Chat or dialog id */
  "sender_action":"mark_seen"                       /* Possible values: sending_photo, sending_video, sending_audio */
}

Direct user messages

It is possible to send a message from group to a single or multiple users at once.

User must allow to receive group messages before it can be sent to him.

Following message syntax is used for this purpose:

{
    "recipient":{
        "user_ids":[                                /* List of user ids in user:id or id format*/
            "user:123456789012",                    
            "210987654321"
        ]
    },
    "message":{                                     /* Message content */
        "text":"Hello"                              /* Message text */
    }
}

Each user from the list will get a message in his own group-to-user chat.

API will respond with two corresponding list of values: * boolean type values list that indicate if message was or was not successfully sent; * list of user-to-group chat ids in which messages where sent.

{
  "success": [
    true,
    false
  ],
  "chat_ids": [
    "chat:C401b13206b00",
    null
  ]
}

To send a message directly to one user you can use a simplified message syntax:

{
    "recipient":{
        "user_id": "user:123456789012"              /* Recipient's id in user:id or id format*/
    },
    "message":{                                     /* Message content */
        "text":"Hello"                              /* Message text */
    }
}

Message format

{
  "message": {
    "text": "String", /* Message text */
    "attachment": { 
      "type": "IMAGE|VIDEO|AUDIO|SHARE|FILE|CONTACT|INLINE_KEYBOARD|LOCATION|MUSIC|CALL|PRESENT|STICKER", /* attachment type */
      "payload": AttachmentPayload /* attachment body, depends on type */
    }, /* single message attachment */
    "attachments": [{
      "type": "IMAGE|VIDEO|AUDIO|SHARE|FILE|CONTACT|INLINE_KEYBOARD|LOCATION|MUSIC|CALL|PRESENT|STICKER",
      "payload": AttachmentPayload
    }], /* multiple message attachments */
    "privacyWarning": "SCREENSHOT|SCREENCAST",
    "reply_to": "MID:" /* responded message id */
  }
}

Attachments

Message can contain a single or multiple attachments of following type:

  • IMAGE - image;
  • VIDEO - video;
  • AUDIO - audio;
  • SHARE - OK content reshare;
  • FILE - file of any extension;
  • CONTACT - user contact;
  • INLINE_KEYBOARD - action buttons structure;
  • LOCATION - user location;
  • MUSIC - OK music track;
  • CALL - information about video / audio call;
  • PRESENT - OK present;
  • STICKER - OK sticker.

Attachment’s payload depends on its type and can differ.

IMAGE

The image attachment.

    
{
  "id": "imageId",
  "token": "imageToken",
  "url": "https://image.url"
}

There are following ways to send such attachment to a chat:

  • specify token from existing message with attachment
  • specify token, acquired during image upload using method GET graph.user.fileUploadUrl method
{
  "token": "imageToken"
}
  • specify image URL, but only 1 such image can be present in request
{
  "url": "https://image.url"
}

VIDEO

The video attachment.

{
  "id": "videoId",
  "token": "videoToken",
  "url": "https://video.url"
}

There are following ways to send such attachment to a chat:

  • specify token from existing message with attachment
  • specify token, acquired during video upload using method GET graph.user.fileUploadUrl method
{
  "token": "videoToken"
}

AUDIO

The audio attachment.

{
  "id": "audioId",
  "token": "audioToken",
  "url": "https://audio.url"
}

There are following ways to send such attachment to a chat:

  • specify token from existing message with attachment
  • specify token, acquired during audio upload using method GET graph.user.fileUploadUrl method
{
  "token": "audioToken"
}

FILE

File of any format.

{
  "id": "fileId",
  "token": "fileToken",
  "url": "https://file.url"
}

There are following ways to send such attachment to a chat:

  • specify token from existing message with attachment
  • specify token, acquired during audio upload using method GET graph.user.fileUploadUrl method
{
  "token": "fileToken"
}

SHARE

Reshare of a content previously published on OK. This attachment can contain a link to a group, video, group / user topic, image, etc.

{
  "id": "123456789",                                        
  "url": "https://ok.ru/group123456789/topic/123456789"
}

Creation of this type of attachment via botapi is not supported.

CONTACT

OK’s user contact.

{
  "id": "123456789",                /* user identifier */
  "name": "firstName lastName",     /* username */
  "photoUrl": "https://photo.url",  /* link to user's avatar */
  "phone": "79493344555",           /* user phone number */
  "vcfBody": "..."                  /* vCard electronic business card */
}

There are following ways to send such attachment to a chat:

  • specify user identifier
{
  "id": "123456789"
}
  • specify vCard electronic business card data
{
  "vcfBody": "..."
}

LOCATION

User’s location.

{
  "latitude": 59.928658,
  "longitude": 30.38113,
  "altitude": 1.0000,
  "epu": 1.0000,
  "heading": 1.0000,
  "speed": 1.0000,
  "zoom": 1.0000,
  "livePeriod": 600  /* time during which the user will share the live location, in seconds */
}

There are following ways to send such attachment to a chat:

  • specify coordinates latitude and longitude (other fields are optional)
{
  "latitude": 59.928658,
  "longitude": 30.38113
}

MUSIC

OK music track.

{
  "id": "23486020457601",                           
  "url": "https://ok.ru/music/track/23486020457601" 
}

There are following ways to send such attachment to a chat:

  • specify track identifier
{
  "id": "23486020457601",                           
}

CALL

Video/audio call info.

{
  "id": "23486020457601",                           /* call identifier */
  "type": "AUDIO|VIDEO",                            /* call type */
  "hangupType": "CANCELED|REJECTED|HUNGUP|MISSED"   /* call hangup type */
  "duration": 10                                    /* call duration */
}

Creation of this type of attachment via botapi is not supported.

PRESENT

This type of attachment is currently not supported

OK present.

{
  "id": "23486020457601",            /* present identifier */
  "status": "SENT",                  /* present status */
  "receiverId": "USER:12345678901",  /* receiver id */
  "senderId": "USER:12345678902"     /* sender id */
}

Creation of this type of attachment via botapi is not supported.

STICKER

OK sticker.

{
  "id": "c23a918ef4",                                         
  "url": "https://i.mycdn.me/getSmile?smileId=c23a918ef4"     
}

There are following ways to send such attachment to a chat:

  • specify sticker identifier
{
  "id": "c23a918ef4"                                         
}

INLINE_KEYBOARD

REQUEST_GEO_LOCATION and REQUEST_CONTACT type buttons are currently not supported

Buttons structure.

{
    "keyboard": {
        "buttons": [
            [
                {
                    "type": "CALLBACK",                     /* button type */
                    "text": "someText",                     /* button text */
                    "intent": "DEFAULT|POSITIVE|NEGATIVE",  /* button color scheme */
                    "payload": "callbackPayload"            /* payload text */
                }
            ],
            [
                {
                    "type": "LINK",
                    "text": "someText",
                    "intent": "DEFAULT|POSITIVE|NEGATIVE",
                    "url": "https://some.url"               
                }
            ],
            [
                {
                    "type": "REQUEST_CONTACT",
                    "text": "someText",
                    "intent": "DEFAULT|POSITIVE|NEGATIVE"
                },
                {
                    "type": "REQUEST_GEO_LOCATION",
                    "text": "someText",
                    "intent": "DEFAULT|POSITIVE|NEGATIVE",
                    "quick": true
                }
            ]
        ]

    },
    "callbackId": "16ef50d9a4e00c516ef50d9a4e00c516ef50d9a4e00c5"   /* callback identifier */
}

Buttons list is a two dimensional array where buttons can be placed one on a single line or as a group.

There are following buttons types supported:

  • CALLBACK - main type of a button. When pressed by a user a new message is sent to a chat (called callback message);
  • LINK - a button that contains a link to another URL;
  • REQUEST_CONTACT - request of current user’s contact info;
  • REQUEST_GEO_LOCATION - request of current user’s location info.