Skip to content

Chats API

Chat API

Chats

A chat represents a single conversation. In practice, there is usually zero or one visitor member and an arbitrary number of user ("operator") members.

A chat has the following attributes:

Attribute Type Editable Description
id UUID read-only Unique identifier for the chat
token string read-only A legacy Giosg-signed encoded unique string for the chat
created_at datetime read-only When the chat conversation started
updated_at datetime read-only When the chat conversation was last time updated
is_waiting boolean read-only This is true for new chats that are started by a visitor and they require a response by a user (and the chat has not ended yet). Otherwise this is false.
waiting_started_at datetime read-only When the chat became waiting. This is the timestamp when the is_waiting attribute changed true. It does not change when the is_waiting becomes false. Default value for this is null and it stays so if the chat never became waiting.
is_ended boolean optional Whether or not the chat has ended. Once ended, messages and members of the chat cannot be altered any more. Updating this to true immediately and permanently locks the chat. Defaults to false.
ended_at datetime read-only When the chat conversation ended (or null if not yet ended)
room_id UUID read-only ID of the room in which the chat occurred
chat_type string optional Whether the chat's type is visitor (visitor), or task (task) or from some external source (external). When POSTing a new chat with create a new chat endpoint this will default to visitor if omitted from request. Chats with type visitor are chat sessions that has a visitor membership. Chats with type task will be closed automaticaly by room options ttl. Chats with type external are chat sessions that are from external source (e.g. some integration). These chat's do not close automatically.
is_autosuggested boolean read-only Whether or not the chat started with an autosuggestion
is_encrypted boolean read-only Whether or not the messages of this chat are stored encrypted.
message_count integer read-only How many messages there are in total in this chat at the moment. NOTE that this only includes messages with type msg, so this does not include autosuggestions, or join/leave messages.
user_message_count integer read-only How many messages there were by operator in this chat
visitor_message_count integer read-only How many messages there were by visitor in this chat
member_count integer read-only How many people (visitor and users) have attended or sent messages to this chat.
user_member_count integer read-only How many users have sent at least one message to the chat.
visitor_member_count integer read-only How many visitors have attended this chat.
present_participant_count integer read-only How many people (visitor and users) there are currently participating and present at this chat.
present_user_participant_count integer read-only How many users there are currently participating and present at this chat.
present_visitor_participant_count integer read-only How many visitor there are currently participating and present at this chat
visitor_wait_time float read_only How many seconds the visitor had to wait for an answer to the first sent message. This is null if the visitor has not got an answer yet.

List visitor's chats

You can get a list of all chats of the visitor.

1
GET https://service.giosg.com/api/v5/public/visitors/cdca48c949a5966bf8aa53ff79452b60/chats
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
  "next": null,
  "previous": null,
  "results": [
    {
      "id": "b8126675-e874-11e7-8623-8c85901fa51f",
      "room_id": "b13abd9c-c301-11e7-8e89-8c85901fa51f",
      "room_organization_id": "b084711c-c301-11e7-ad3d-8c85901fa51f",
      "created_at": "2017-12-27T06:36:06.015Z",
      "is_waiting": false,
      "waiting_started_at": null,
      "ended_at": null,
      "updated_at": "2017-12-27T06:36:06.062Z",
      "is_encrypted": false,
      "is_autosuggested": true,
      "is_ended": false,
      "chat_type": "visitor",
      "message_count": 0,
      "user_message_count": 0,
      "visitor_message_count": 0,
      "present_participant_count": 0,
      "present_user_participant_count": 0,
      "present_visitor_participant_count": 0,
      "member_count": 1,
      "user_member_count": 0,
      "visitor_member_count": 1,
      "legacy_id": "vnzv4klw3n2h3i5fauaafoasmz26q5ar46dchdefsap2khym",
      "legacy_room_id": "ck4bs2fhokfkm3k5waaafmj2xwomgair46hitdefsap2khym"
    }
  ]
}

GET /api/v5/public/visitors/<visitor_id>/chats

This API endpoint returns a paginated collection. They are sorted by the creation time of the chats, in ascending order.

Retrieve visitor's chat

Get a single chat object by its ID.

GET /api/v5/public/visitors/<visitor_id>/chats/<chat_id>

Create a new chat

Start a new chat with a visitor in the given room.

POST /api/v5/public/orgs/<organization_id>/rooms/<room_id>/visitors/<visitor_id>/chats

The visitor will automatically be added as member of the chat by creating a Chat membership resource. This endpoint will attempt to get an existing open chat in this room where the visitor is already a member, instead of creating a new chat. This will update visitor's is_participating status.

You may want to start chat with a specific user or users. This endpoint can take user_member_ids list as payload. This will try to find existing chat for visitor and all the given users. user_member_ids list must contain only ID's of users who have access to this room.

You may also want to state that your chat is coming from some specific integration and you do not want giosg to automatically end the chat after two hours (e.g. you are using giosg's chat as a part of mailbox app in which the chats should persist). You may set chat_type to be external instead of visitor. This however leaves the responsibility of closing the chat for the integration provider or for operators via giosg console. If the chats are not closed then they won't show as proper chat sessions in giosg's reporting.

This endpoint will return:

  • 200 if existing open chat in this room for visitor was found and is_participating status was updated.
  • 201 when a new chat was created successfully.
  • 400 if user_member_ids list was provided but the users were not found or the users do not have access to the room.
  • 400 if chat_type was provided but the choice was invalid.

End a chat

Example request that closes a chat

1
PUT https://service.giosg.com/api/v5/public/visitors/bed3221e-879e-43df-8d0e-d63f8c1f012d/chats/100067c3-2dda-4343-b403-1bb6caf1d14d

Example payload

1
2
3
{
  "is_ended": true
}

Conversations between users and visitors usually end automatically when no one has sent any messages to the chat after a certain time. However, visitor may also explicitly end the chat conversation.

Once ended, no new chat messages or chat memberships can be added to the chat anymore! Chat cannot be reopened. You should create a new chat if you want to continue conversation with the other person.

You can end explicitly a chat in which you are a member by updating the is_ended attribute to true:

PUT /api/v5/public/visitors/<visitor_id>/chats/<chat_id>

or

PATCH /api/v5/public/visitors/<visitor_id>/chats/<chat_id>

You need to define the is_ended attribute with value true as a payload.

Chat memberships

The visitor and each user who has participated to a chat is added as a chat membership to the chat.

Attribute Format Editable Description
member_id UUID/string read-only ID of the user or visitor being present at the chat.
member_type string read-only Either visitor or user.
member_public_name string read-only The name of the user/visitor as it would be displayed for the visitor. This is user's alias if they have one, otherwise it is their real name. For visitors, this is any custom username (e.g. set by API data) or null
member_avatar object read-only If the user/visitor has an avatar image, then this is is an object with id and url attributes. Otherwise this is null.
chat_id UUID read-only ID of the chat.
created_at datetime read-only When the user/visitor was added as a chat member.
last_seen_at datetime optional When the user/visitor was last seen at. This field may be updated by clients to let other clients know that user has seen the conversation and messages were read. This field may be null if the value was not set yet.
updated_at datetime read-only When the this membership was updated.
message_count integer read-only How many messages the user/visitor has sent to the chat. This may be 0, e.g. when operator has joined the chat but has not sent any message yet.
is_participating boolean required Whether or not the user/visitor has the chat "open". In practise this reflects the state of the chat window. When the user/visitor closes the chat window, it is supposed that he is no more participating the chat (but the membership still remains)
is_present boolean read-only Whether or not the user/visitor is currently present. Equals the is_present attribute of the member.
composing_status string required One of the following: idle, typing, typed. The typing status will be automatically downgraded to typed if the composing status has not been refreshed for a while.

List chat memberships

1
GET https://service.giosg.com/api/v5/public/visitors/3b90ef7c93484af4965a79ace7bc9a62/chats/58f5055c-56e0-11e5-9354-6c4008c08dfe/memberships
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
  "next": "https://service.giosg.com/api/v5/public/visitors/3b90ef7c93484af4965a79ace7bc9a62/chats/58f5055c-56e0-11e5-9354-6c4008c08dfe/memberships?cursor=45d9e7358e1249c491b4fa0212310f55",
  "previous": null,
  "results": [
    {
      "member_id": "378ad5a0-bb89-481b-978b-4268b368cfef",
      "member_type": "user",
      "member_public_name": "Customer Service",
      "member_avatar": {
        "id": "7f9cb877-0fd9-4c27-90b0-bd4c2842da3d",
        "url": "http://www.example.com/avatar/5ef1a0ef-8b61-4473-8706-9669e30b47e6.jpg"
      },
      "chat_id": "58f5055c-56e0-11e5-9354-6c4008c08dfe",
      "created_at": "2015-02-13T11:31:36.042",
      "last_seen_at": "2015-02-13T11:31:36.042",
      "is_participating": true,
      "is_present": true,
      "composing_status": "idle",
      "message_count": 8
    },
    {
      "member_id": "3b90ef7c93484af4965a79ace7bc9a62",
      "member_type": "visitor",
      "member_public_name": null,
      "member_avatar": null,
      "chat_id": "58f5055c-56e0-11e5-9354-6c4008c08dfe",
      "created_at": "2015-02-13T12:14:34.154",
      "last_seen_at": "2015-02-13T12:14:34.154",
      "is_participating": true,
      "is_present": true,
      "composing_status": "typing",
      "message_count": 7
    }
  ]
}

You may get a paginated collection of all memberships of a chat.

GET /api/v5/public/visitors/<visitor_id>/chats/<chat_id>/memberships

Returns 404 if the chat is not one of the visitor's chats.

List chat memberships of a visitor

As an alternative to list a visitor's chats, you can also list a visitor's chat memberships as a paginated collection. This includes each chat membership object that represents the visitor in each of his chats.

GET /api/v5/public/visitors/<visitor_id>/chat_memberships

Change visitor chat status

Example request for making the visitor typing at the chat

1
PUT /api/v5/public/visitors/5cd16aaf35d6488094a5f160afa29767/chat_memberships/e9f4c403-0d0f-4bb8-9883-8f2eb5c9079b

Example request payload

1
2
3
4
5
{
  "is_participating": true,
  "composing_status": "typing",
  "last_seen_at": "2015-02-13T12:14:34.154"
}

The participation status should be refreshed when the visitor opens or closes a chat. In addition, you should frequently notify the backend about the composing status of the visitor. For example, you should make a request when the visitor starts typing a message for the chat (and more requests frequently if the visitor keeps typing, stops typing or clears the composition area).

Also it is highly recommended that clients update last_seen_at field whenever user interface displays chat to user. This allows other clients to know if messages have been received and read/seen by the other users.

You can change the chat status of the visitor:

PUT https://service.giosg.com/api/v5/public/visitors/<visitor_id>/chat_memberships/<chat_id>

Chat messages

Chat consists of a number of messages. Some of them are actual typed messages from either operator or visitor, and some of them are automatically added events about the chat, especially when an operator has joined or leaved the chat.

Attribute Type Editable Description
id UUID read-only Unique identifier for the message
type string required Whether the message is an actual message (msg), autosuggest (autosuggest), a join event (join), a leave event (leave), an action event (action), a call request (call_request), a call information (call_ended), a interaction data (interaction_submit), or a message from system (system). When POSTing a message, this can be set to msg, action, call_request, interaction_submit, or system.
chat_id UUID read-only ID of the chat.
created_at datetime read-only When the message was sent
sender_type string required Whether the sender is operator (user), visitor (visitor), or triggered by rule (rule). When POSTing a new message with these endpoints, this will accept only visitor and rule as sender types.
sender_id UUID/string optional Identifier for the sender. If the sender is a user, then this is the user's ID. For visitor this is an unique string. If the sender was a rule, it is the ID of the rule which triggered this message.
sender_public_name string read-only A display name for the sender as the visitor would see the him. This value might change if the sender type was rule. Note: If the message_type is rule, then this field is required.
sender_avatar object read-only If the sender has an avatar image, then this is an object with id and url attributes. Otherwise this is null.
message string required Content text of the message. The maximum length is 2000 characters. This will always be the decrypted if the decryption key is still being stored at the server. Otherwise, this will be null if the server cannot decrypt the message any more. In cases where the chat message's type was action, this can be either the text of the chosen attachment action or title of the attachment. If neither are provided, this is null. Note: If the message's type is action, then this field is read-only.
is_encrypted boolean read-only Whether or not the message is stored encrypted. If true and message is null, it means that the message cannot be decrypted anymore.
attachments list of objects read-only List of chat message attachments for this chat message. These represent rich or interactive content provided in this message.
attachment_template string read-only Type of chat message attachment template, either null, "generic" or "interaction".
response_to_message_id UUID read-only Unique identifier of the message this was a response to. null if it wasn't a response.
response_to_attachment_id UUID read-only Unique identifier of the chosen attachment this was a response to. null if it wasn't a response.
response_to_attachment object read-only The chosen attachment of the response. null if it wasn't a response.
response_to_action_id UUID read-only Unique identifier of the chosen attachment action this was a response to. null if it wasn't a response.
response_to_action object read-only The chosen attachment action of the response. null if it wasn't a response.
response_value string read-only The chosen attachment value of the response. If the chosen attachment was an action, then this is the value of the action. Otherwise this may be the attachment's title_link_url, image_url, image_link_url or a link provided in text field (Markdown). null if it wasn't a response.
response_text string read-only Response text of the attachment response. This field may be null if response was to generic attachment or free form text if this message was response to interaction attachment. This field is required for interaction attachment response.

List chat messages

1
GET https://service.giosg.com/api/v5/public/visitors/f7a5a3b83d2e40dfb0dedd6c0e284214/chats/450fc49e-277e-4dd6-af0f-6e9dcb885b09/messages
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
{
  "next": "https://service.giosg.com/api/v5/public/visitors/f7a5a3b83d2e40dfb0dedd6c0e284214/chats/450fc49e-277e-4dd6-af0f-6e9dcb885b09/messages?cursor=171cfd0d7ce542be86221f01d2823cb1",
  "previous": null,
  "results": [
    {
      "id": "8a94b3f1-d8a9-4530-b1f1-b757a8a57078",
      "type": "autosuggest",
      "chat_id": "450fc49e-277e-4dd6-af0f-6e9dcb885b09",
      "created_at": "2015-02-13T11:30:03.045",
      "sender_type": "user",
      "sender_id": "7c94ae79-a4b4-4eea-ac23-24c16f910080",
      "sender_public_name": "Customer Service",
      "message": "How may I help you?",
      "attachments": [],
      "attachment_template": null,
      "response_to_message_id": null,
      "response_to_attachment_id": null,
      "response_to_attachment": null,
      "response_to_action_id": null,
      "response_to_action": null,
      "response_value": null,
      "response_text": null
    },
    {
      "id": "58f5055c-56e0-11e5-9354-6c4008c08dfe",
      "type": "msg",
      "chat_id": "450fc49e-277e-4dd6-af0f-6e9dcb885b09",
      "created_at": "2015-02-13T11:31:36.042",
      "sender_type": "visitor",
      "sender_id": "f7a5a3b83d2e40dfb0dedd6c0e284214",
      "sender_public_name": null,
      "message": "Yes, actually you could.",
      "attachments": [],
      "attachment_template": null,
      "response_to_message_id": null,
      "response_to_attachment_id": null,
      "response_to_attachment": null,
      "response_to_action_id": null,
      "response_to_action": null,
      "response_value": null,
      "response_text": null
    },
    {
      "id": "a3a3b8ed-7336-431a-8350-8f5be471a09e",
      "type": "join",
      "chat_id": "450fc49e-277e-4dd6-af0f-6e9dcb885b09",
      "created_at": "2015-02-13T11:31:38.123",
      "sender_type": "user",
      "sender_id": "7c94ae79-a4b4-4eea-ac23-24c16f910080",
      "sender_public_name": "Customer Service",
      "attachments": [],
      "attachment_template": null,
      "response_to_message_id": null,
      "response_to_attachment_id": null,
      "response_to_attachment": null,
      "response_to_action_id": null,
      "response_to_action": null,
      "response_value": null,
      "response_text": null
    },
    {
      "id": "487a4dce-503a-43d0-bd62-1e1a7582c93b",
      "type": "msg",
      "chat_id": "450fc49e-277e-4dd6-af0f-6e9dcb885b09",
      "created_at": "2015-02-13T11:32:01.654",
      "sender_type": "user",
      "sender_id": "7c94ae79-a4b4-4eea-ac23-24c16f910080",
      "sender_public_name": "Customer Service",
      "message": "OK, what do you want to know?",
      "attachments": [],
      "attachment_template": null,
      "response_to_message_id": null,
      "response_to_attachment_id": null,
      "response_to_attachment": null,
      "response_to_action_id": null,
      "response_to_action": null,
      "response_value": null,
      "response_text": null
    }
  ]
}

Get the collection of all chat messages in the given chat.

GET /api/v5/public/visitors/<visitor_id>/chats/<chat_id>/messages

Send a chat message

Example request for normal message

1
POST https://service.giosg.com/api/v5/public/visitors/be82243cf82540c49a629543022a3de2/chats/4a591004-4c18-4260-bbb4-fc9f9f9a048d/messages

Example request payload for normal message

1
2
3
4
{
  "type": "msg",
  "message": "Thank you for your help!"
}

Send a new chat message with type msg to a chat:

POST /api/v5/public/visitors/<visitor_id>/chats/<chat_id>/messages

The sender_type is automatically set to visitor and sender_id is set to <visitor_id>.

If this is the first message with type msg in the chat, then its is_waiting attribute is automatically set to true. (This only affects the authenticated users)

This endpoint will return:

  • 201 if a new chat message was created successfully
  • 403 if the visitor has been banned
  • 404 if the chat is not one of the visitor's chats
  • 404 if the visitor does not exist
  • 409 if the chat is ended

Example request for system message

1
POST https://service.giosg.com/api/v5/public/visitors/be82243cf82540c49a629543022a3de2/chats/4a591004-4c18-4260-bbb4-fc9f9f9a048d/messages

Example request payload for system message

1
2
3
4
5
6
7
{
  "type": "system",
  "sender_id": "f8c932ab-0b0f-11e8-91b8-f45c89c72de3",
  "sender_type": "rule",
  "sender_public_name": "Customer service",
  "message": "There is some traffic in our system"
}

Send a new chat message with type system to a chat:

POST /api/v5/public/visitors/<visitor_id>/chats/<chat_id>/messages

The required parameters for this endpoint are:

  • type, this has to be system.
  • sender_id, this should be the ID of the rule which triggered this message.
  • sender_type, this has to be rule.
  • sender_public_name, this has to match rule action's send message's sender_public_name field. Note: This value is only obtainable from settings page currently.
  • message, this has to match rule action's value. Note: This is only obtainable from settings page currently. Note: If rule action is send interaction to chattype this has to match the interaction id.

This endpoint will return:

  • 201 if a new chat message was created successfully
  • 400 if there is no real Rule with the given sender_id
  • 400 if type and sender_type are not both in correct formats
  • 400 if the rule action's sender_public_name and given sender_public_name differ
  • 400 the rule action's value and given message differ
  • 403 if the visitor has been banned
  • 404 if the chat is not one of the visitor's chats
  • 404 if the visitor does not exist
  • 409 if the chat is ended

Reply to chat message attachment

There are some additional fields that need to be included in payload when the visitor reacts to the attachment. These fields are:

Attribute Type Editable Description
type string required Type of this message. This should be action this case.
response_to_message_id UUID required ID of the original message with attachments which the visitor reacted.
response_to_attachment_id UUID required ID of the attachment which the visitor reacted.
response_to_action_id UUID optional ID of the attachment action which the visitor reacted. In cases where the attachment does not have this field, it can be neglected.
response_value string required String representation of the attachment field (title_link_url, image_url, image_link_url or a link inside markdown) to which the visitor reacted. This should be omitted in cases where the visitor reacted to an action. Note: If the chosen attachment was an action, then this field is read-only.
response_text string optional Response text of attachment response. This field is optional for generic chat attachments and required when replying to interaction attachment or external attachment.

Note: In cases where visitor sends a message of type action, the message field is NOT required!

1
POST https://service.giosg.com/api/v5/public/visitors/be82243cf82540c49a629543022a3de2/chats/4a591004-4c18-4260-bbb4-fc9f9f9a048d/messages

Example request payload

1
2
3
4
5
6
{
  "type": "action",
  "response_to_message_id": "8a94b3f1-d8a9-4530-b1f1-b757a8a57078",
  "response_to_attachment_id": "57931251-4b4d-11e7-bf24-f45c89c72de3",
  "response_value": "http://running-shoes.com/nike-free-rn"
}

Example response

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
  "id": "899042d4-4aaf-11e7-899c-f45c89c72de3",
  "type": "action",
  "chat_id": "4a591004-4c18-4260-bbb4-fc9f9f9a048d",
  "created_at": "2017-06-13T11:30:03.045",
  "sender_type": "visitor",
  "sender_id": "be82243cf82540c49a629543022a3de2",
  "sender_public_name": null,
  "sender_name": null,
  "message": "Nike Free RN",
  "is_encrypted": false,
  "sensitive_data_purged_at": null,
  "attachments": [],
  "attachment_template": null,
  "response_to_message_id": "8a94b3f1-d8a9-4530-b1f1-b757a8a57078",
  "response_to_attachment_id": "57931251-4b4d-11e7-bf24-f45c89c72de3",
  "response_to_attachment": {
    "id": "57931251-4b4d-11e7-bf24-f45c89c72de3",
    "interaction_id": null,
    "parameters": null,
    "title": "Nike Free RN",
    "title_link_url": null,
    "text": "Women's running shoe, 100€",
    "image_url": "http://s3.amazon.com/fjifew932mlfs.png",
    "image_link_url": "http://running-shoes.com/nike-free-rn",
    "link_target": "_blank"
  },
  "response_to_action_id": null,
  "response_to_action": null,
  "response_value": "http://running-shoes.com/nike-free-rn",
  "response_text": null
}

Send a new chat message with type action to a chat:

POST /api/v5/public/visitors/<visitor_id>/chats/<chat_id>/messages

The basic concept for this is as same as sending a new chat message to the chat with different payload for type field. Note that you must also include the rest of the required fields.

Chat tags

List all tags used on visitor's chat. This API returns only hashed versions of tag names.

Attribute Format Editable Description
hashed_name string read-only Hash of the tag name added to visitor's chat.
chat_session_id UUID/string read-only ID of chat session this tag belongs to.
room_id UUID/string read-only ID of the room where chat session belongs to.
created_at datetime read-only When the tag was added to chat.

List chat tags

1
GET https://service.giosg.com/api/v5/public/visitors/3b90ef7c93484af4965a79ace7bc9a62/chats/58f5055c-56e0-11e5-9354-6c4008c08dfe/tags
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
{
  "next": "https://service.giosg.com/api/v5/public/visitors/3b90ef7c93484af4965a79ace7bc9a62/chats/58f5055c-56e0-11e5-9354-6c4008c08dfe/tags?cursor=45d9e7358e1249c491b4fa0212310f55",
  "previous": null,
  "results": [
    {
      "hashed_name": "ce5116c10b7580a409a230c5b4285c5329417189",
      "chat_session_id": "58f5055c-56e0-11e5-9354-6c4008c08dfe",
      "room_id": "77f140cf-6f04-11e8-a060-60f81db14236",
      "created_at": "2015-02-13T11:31:36.042"
    },
    {
      "hashed_name": "25d4d74e6e37f5b1a455fd7a45fda2acc2ce0ee4",
      "chat_session_id": "58f5055c-56e0-11e5-9354-6c4008c08dfe",
      "room_id": "77f140cf-6f04-11e8-a060-60f81db14236",
      "created_at": "2015-02-13T12:14:34.154"
    }
  ]
}

You may get a paginated collection of all tags of a chat.

GET /api/v5/public/visitors/<visitor_id>/chats/<chat_id>/tags

Returns 404 if the chat is not one of the visitor's chats. Returns empty list if chat doesn't have any tags.