mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2024-12-17 17:20:21 +01:00
Compare commits
4 Commits
v6.2.0
...
ep/bot-rfc
| Author | SHA1 | Date | |
|---|---|---|---|
| 9e0079f41b | |||
| 07ad04c0f6 | |||
| d64351b760 | |||
| b06211bd4e |
@@ -587,7 +587,7 @@ struct SMPStatsView: View {
|
||||
} header: {
|
||||
Text("Statistics")
|
||||
} footer: {
|
||||
Text("Starting from \(localTimestamp(statsStartedAt)).") + Text("\n") + Text("All data is private to your device.")
|
||||
Text("Starting from \(localTimestamp(statsStartedAt)).") + Text("\n") + Text("All data is kept private on your device.")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -703,7 +703,7 @@ struct XFTPStatsView: View {
|
||||
} header: {
|
||||
Text("Statistics")
|
||||
} footer: {
|
||||
Text("Starting from \(localTimestamp(statsStartedAt)).") + Text("\n") + Text("All data is private to your device.")
|
||||
Text("Starting from \(localTimestamp(statsStartedAt)).") + Text("\n") + Text("All data is kept private on your device.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -731,8 +731,8 @@
|
||||
<target>Всички данни се изтриват при въвеждане.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All group members will remain connected." xml:space="preserve">
|
||||
|
||||
@@ -712,8 +712,8 @@
|
||||
<target>Všechna data se při zadání vymažou.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All group members will remain connected." xml:space="preserve">
|
||||
|
||||
@@ -760,8 +760,8 @@
|
||||
<target>Alle Daten werden gelöscht, sobald dieser eingegeben wird.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<target>Alle Daten werden nur auf Ihrem Gerät gespeichert.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
|
||||
@@ -760,9 +760,9 @@
|
||||
<target>All data is erased when it is entered.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<target>All data is private to your device.</target>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<target>All data is kept private on your device.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All group members will remain connected." xml:space="preserve">
|
||||
|
||||
@@ -760,8 +760,8 @@
|
||||
<target>Al introducirlo todos los datos son eliminados.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<target>Todos los datos son privados y están en tu dispositivo.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
|
||||
@@ -707,8 +707,8 @@
|
||||
<target>Kaikki tiedot poistetaan, kun se syötetään.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All group members will remain connected." xml:space="preserve">
|
||||
|
||||
@@ -745,8 +745,8 @@
|
||||
<target>Toutes les données sont effacées lorsqu'il est saisi.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<target>Toutes les données restent confinées dans votre appareil.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
|
||||
@@ -760,8 +760,8 @@
|
||||
<target>A jelkód megadása után az összes adat törlésre kerül.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<target>Az összes adat biztonságban van az eszközén.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
|
||||
@@ -759,8 +759,8 @@
|
||||
<target>Tutti i dati vengono cancellati quando inserito.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<target>Tutti i dati sono privati, nel tuo dispositivo.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
|
||||
@@ -724,8 +724,8 @@
|
||||
<target>入力するとすべてのデータが消去されます。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All group members will remain connected." xml:space="preserve">
|
||||
|
||||
@@ -760,8 +760,8 @@
|
||||
<target>Alle gegevens worden bij het invoeren gewist.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<target>Alle gegevens zijn privé op uw apparaat.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
|
||||
@@ -745,8 +745,8 @@
|
||||
<target>Wszystkie dane są usuwane po jego wprowadzeniu.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<target>Wszystkie dane są prywatne na Twoim urządzeniu.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
|
||||
@@ -5425,8 +5425,8 @@ Isso pode acontecer por causa de algum bug ou quando a conexão está comprometi
|
||||
<source>Advanced settings</source>
|
||||
<target state="translated">Configurações avançadas</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve" approved="no">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve" approved="no">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<target state="translated">Toda informação é privada em seu dispositivo.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve" approved="no">
|
||||
|
||||
@@ -760,8 +760,8 @@
|
||||
<target>Все данные удаляются при его вводе.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<target>Все данные хранятся только на вашем устройстве.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
|
||||
@@ -699,8 +699,8 @@
|
||||
<target>ข้อมูลทั้งหมดจะถูกลบเมื่อถูกป้อน</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All group members will remain connected." xml:space="preserve">
|
||||
|
||||
@@ -745,8 +745,8 @@
|
||||
<target>Kullanıldığında bütün veriler silinir.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<target>Tüm veriler cihazınıza özeldir.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
|
||||
@@ -756,8 +756,8 @@
|
||||
<target>Всі дані стираються при введенні.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<target>Всі дані є приватними для вашого пристрою.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
|
||||
@@ -739,8 +739,8 @@
|
||||
<target>所有数据在输入后将被删除。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is private to your device." xml:space="preserve">
|
||||
<source>All data is private to your device.</source>
|
||||
<trans-unit id="All data is kept private on your device." xml:space="preserve">
|
||||
<source>All data is kept private on your device.</source>
|
||||
<target>所有数据都是您设备的私有数据.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
|
||||
@@ -479,7 +479,7 @@
|
||||
"All data is erased when it is entered." = "Alle Daten werden gelöscht, sobald dieser eingegeben wird.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All data is private to your device." = "Alle Daten werden nur auf Ihrem Gerät gespeichert.";
|
||||
"All data is kept private on your device." = "Alle Daten werden nur auf Ihrem Gerät gespeichert.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "Alle Gruppenmitglieder bleiben verbunden.";
|
||||
|
||||
@@ -479,7 +479,7 @@
|
||||
"All data is erased when it is entered." = "Al introducirlo todos los datos son eliminados.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All data is private to your device." = "Todos los datos son privados y están en tu dispositivo.";
|
||||
"All data is kept private on your device." = "Todos los datos son privados y están en tu dispositivo.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "Todos los miembros del grupo permanecerán conectados.";
|
||||
|
||||
@@ -431,7 +431,7 @@
|
||||
"All data is erased when it is entered." = "Toutes les données sont effacées lorsqu'il est saisi.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All data is private to your device." = "Toutes les données restent confinées dans votre appareil.";
|
||||
"All data is kept private on your device." = "Toutes les données restent confinées dans votre appareil.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "Tous les membres du groupe resteront connectés.";
|
||||
|
||||
@@ -479,7 +479,7 @@
|
||||
"All data is erased when it is entered." = "A jelkód megadása után az összes adat törlésre kerül.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All data is private to your device." = "Az összes adat biztonságban van az eszközén.";
|
||||
"All data is kept private on your device." = "Az összes adat biztonságban van az eszközén.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "Az összes csoporttag kapcsolatban marad.";
|
||||
|
||||
@@ -473,7 +473,7 @@
|
||||
"All data is erased when it is entered." = "Tutti i dati vengono cancellati quando inserito.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All data is private to your device." = "Tutti i dati sono privati, nel tuo dispositivo.";
|
||||
"All data is kept private on your device." = "Tutti i dati sono privati, nel tuo dispositivo.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "Tutti i membri del gruppo resteranno connessi.";
|
||||
|
||||
@@ -479,7 +479,7 @@
|
||||
"All data is erased when it is entered." = "Alle gegevens worden bij het invoeren gewist.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All data is private to your device." = "Alle gegevens zijn privé op uw apparaat.";
|
||||
"All data is kept private on your device." = "Alle gegevens zijn privé op uw apparaat.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "Alle groepsleden blijven verbonden.";
|
||||
|
||||
@@ -431,7 +431,7 @@
|
||||
"All data is erased when it is entered." = "Wszystkie dane są usuwane po jego wprowadzeniu.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All data is private to your device." = "Wszystkie dane są prywatne na Twoim urządzeniu.";
|
||||
"All data is kept private on your device." = "Wszystkie dane są prywatne na Twoim urządzeniu.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "Wszyscy członkowie grupy pozostaną połączeni.";
|
||||
|
||||
@@ -479,7 +479,7 @@
|
||||
"All data is erased when it is entered." = "Все данные удаляются при его вводе.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All data is private to your device." = "Все данные хранятся только на вашем устройстве.";
|
||||
"All data is kept private on your device." = "Все данные хранятся только на вашем устройстве.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "Все члены группы, которые соединились через эту ссылку, останутся в группе.";
|
||||
|
||||
@@ -431,7 +431,7 @@
|
||||
"All data is erased when it is entered." = "Kullanıldığında bütün veriler silinir.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All data is private to your device." = "Tüm veriler cihazınıza özeldir.";
|
||||
"All data is kept private on your device." = "Tüm veriler cihazınıza özeldir.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "Tüm grup üyeleri bağlı kalacaktır.";
|
||||
|
||||
@@ -464,7 +464,7 @@
|
||||
"All data is erased when it is entered." = "Всі дані стираються при введенні.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All data is private to your device." = "Всі дані є приватними для вашого пристрою.";
|
||||
"All data is kept private on your device." = "Всі дані є приватними для вашого пристрою.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "Всі учасники групи залишаться на зв'язку.";
|
||||
|
||||
@@ -413,7 +413,7 @@
|
||||
"All data is erased when it is entered." = "所有数据在输入后将被删除。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All data is private to your device." = "所有数据都是您设备的私有数据.";
|
||||
"All data is kept private on your device." = "所有数据都是您设备的私有数据.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "所有群组成员将保持连接。";
|
||||
|
||||
@@ -2402,7 +2402,7 @@
|
||||
<string name="servers_info_messages_sent">Messages sent</string>
|
||||
<string name="servers_info_messages_received">Messages received</string>
|
||||
<string name="servers_info_details">Details</string>
|
||||
<string name="servers_info_private_data_disclaimer">Starting from %s.\nAll data is private to your device.</string>
|
||||
<string name="servers_info_private_data_disclaimer">Starting from %s.\nAll data is kept private on your device..</string>
|
||||
<string name="servers_info_subscriptions_section_header">Message reception</string>
|
||||
<string name="servers_info_subscriptions_connections_subscribed">Active connections</string>
|
||||
<string name="servers_info_subscriptions_connections_pending">Pending</string>
|
||||
|
||||
@@ -22,9 +22,9 @@
|
||||
},
|
||||
"contactLink": {"ref": "connReqUri"},
|
||||
"preferences": {
|
||||
"type": "string",
|
||||
"additionalProperties": true,
|
||||
"metadata": {
|
||||
"format": "JSON encoded user preferences"
|
||||
"format": "an object with user or contact preferences"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -48,9 +48,9 @@
|
||||
}
|
||||
},
|
||||
"groupPreferences": {
|
||||
"type": "string",
|
||||
"additionalProperties": "true",
|
||||
"metadata": {
|
||||
"format": "JSON encoded user preferences"
|
||||
"format": "an object with group preferences"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -70,7 +70,59 @@
|
||||
"content": {"ref": "msgContent"}
|
||||
}
|
||||
},
|
||||
"forward": {"type": "boolean"}
|
||||
"forward": {"type": "boolean"},
|
||||
"choice": {
|
||||
"optionalProperties": {
|
||||
"persistent": {
|
||||
"enum": {
|
||||
"type": "boolean",
|
||||
"metadata": {
|
||||
"comment": "the choices will remain without bot sending additional message",
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"layout": {
|
||||
"enum": ["column", "row"],
|
||||
"metadata": {"default": "column"}
|
||||
},
|
||||
"allow": {
|
||||
"optionalProperties": {
|
||||
"text": {
|
||||
"type": "boolean",
|
||||
"metadata": {"default": false}
|
||||
}
|
||||
}
|
||||
},
|
||||
"buttons": {
|
||||
"values": {
|
||||
"optionalProperties": {
|
||||
"tag": {
|
||||
"type": "string",
|
||||
"metadata": {"comment": "tag that will be sent in choiceTag property of response"}
|
||||
},
|
||||
"icon": {
|
||||
"type": "string",
|
||||
"metadata": {"comment": "emoji or name of the icon"}
|
||||
},
|
||||
"color": {
|
||||
"type": "string",
|
||||
"metadata": {"comment": "color name or hex code"}
|
||||
},
|
||||
"disabled": {
|
||||
"type": "boolean",
|
||||
"metadata": {"default": false}
|
||||
}
|
||||
}
|
||||
},
|
||||
"metadata": {"comment": "each key must be one of the choices in the text"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"choiceTag": {
|
||||
"type": "string",
|
||||
"metadata": {"comment": "sent inside the response to `choice`, and is mutually exclusive with it"}
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"comment": "optional properties `quote` and `forward` are mutually exclusive"
|
||||
@@ -652,6 +704,16 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"x.grp.prefs": {
|
||||
"properties": {
|
||||
"msgId": {"ref": "base64url"},
|
||||
"params": {
|
||||
"properties": {
|
||||
"groupPreferences": {"ref": "groupPreferences"}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"x.grp.direct.inv": {
|
||||
"properties": {
|
||||
"msgId": {"ref": "base64url"},
|
||||
|
||||
@@ -8,7 +8,7 @@ When business uses a communication system for support and other business scenari
|
||||
|
||||
It's important for the business:
|
||||
- to have bot accept incoming requests.
|
||||
- to be able to add other people to the coversation, as transfer and as escalation.
|
||||
- to be able to add other people to the conversation, as transfer and as escalation.
|
||||
|
||||
This is how all messaging support system works, and how WeChat business accounts work, but no messenger provides it.
|
||||
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
# Chat bots UI
|
||||
|
||||
## Problem
|
||||
|
||||
Chat bots are a simple way to increase utility of the network, as it helps other people to create value by providing arbitrary services via chat interface.
|
||||
|
||||
Interacting with chat bots requires structured commands, which require entering them correctly, similarly how people do it in the terminal, and for most users it's hard.
|
||||
|
||||
## Solution
|
||||
|
||||
### Bot commands
|
||||
|
||||
As commands should be recognized based on their syntax, the same list of commands should be accepted irrespective of the conversation state. In cases commands cannot be executed, for any reason, bot would respond with the message.
|
||||
|
||||
One of the options where commands can be communicated is bot profile the best place to include supported commands, in the form of a menu tree. See the schema.
|
||||
|
||||
The downside of communicating commands via profile is that they may change per contact or per group. The usual place to put commands is chat preferences, which also make sense - receiving commands is "the preference" of the bot. This preference would indicate that bot supports commands, and also which commands are supported with any additional information.
|
||||
|
||||
This menu will be shown to the end users in the app when they type "/" character in the first position of after several spaces. When the user chooses command from the menu, it will be inserted into the entry field for further editing. The placeholders for parameter should be inserted as "<name>". Clients may offer some interaction for filling parameters in, but in MVP it is sufficient to let users edit them directly.
|
||||
|
||||
When processing commands bots should ignore leading and trailing spaces in the user messages.
|
||||
|
||||
### Interactive dialogues with buttons
|
||||
|
||||
A special message sent by chat bot that would show a modal UI requiring to choose one of several presented options. These options should contain the text visible to the user with an optional emoji or action icon. The clients may automatically use icons for known words.
|
||||
|
||||
When this message is received, the compose area is either replaced with or complemented (if the context allows a free text entry in response) with one or several buttons, either located in a row, with wrapping, or in a column.
|
||||
|
||||
When the response is sent, the chosen text is sent, possibly as a reply to the original message, and the original message can be looked at to show which choices it offered in message information pane. There could be slightly different design or some marker to indicate that it was a message that offered multiple choices, and it could be updated to indicate it was replied to.
|
||||
|
||||
The clients probably should not show client messages as replies. There are 3 options here:
|
||||
- show as a normal reply. This avoids any ambiguity in the conversation history, and may protect customers from misbehaving bots - the message would be visually attached to the question.
|
||||
- simply do not show reply in the conversation, but use replies in the protocol.
|
||||
- use some other marker in the protocol.
|
||||
|
||||
I prefer sending and showing normal replies in these cases, as it avoids any ambiguity in the transcript about which question the choices were offered for. That means that bots should support replies, not only normal messages.
|
||||
|
||||
For protocol design we could either offer a completely different message, or we could use a normal message where all information would be present in the message text so it could be correctly presented by the old clients, with additional property that would be interpreted by the new clients so that it can parse the message text to present it as a multiple choice.
|
||||
|
||||
I prefer using normal messages with additional data.
|
||||
|
||||
### Protocol
|
||||
|
||||
Add to message container an optional property `choice`, an object with these optional properties:
|
||||
|
||||
- `persistent`: boolean indicating that the choice should remain after user making a choice without bot sending additional messages, and won't be removed when bot sends additional messages, unless this additional message contains a choice. This is convenient for service bots with limited number of persistent choices, e.g. directory bot that may have buttons "Menu" (or "Help") and free text entry for search queries. This menu will be removed when a message with another choice
|
||||
- `layout`: "row" or "column" (default). "column" layout could use standard confirmation dialogue to present choices on iOS (although it should not be modal, and should allow scrolling the conversation, but not replying or sending messages).
|
||||
- `allow`: an object showing possible arbitrary message responses, currently only `text` property is allowed with `false` (default) or `true` value. Because button responses are just text messages, if free text is allowed, and user sends the same text as button, with or without surrounding spaces, the bots should interpret them in the same way.
|
||||
- `buttons`: an object mapping response texts to buttons, with optional properties `icon`, `color` and `disabled`.
|
||||
|
||||
See the schema in the protocol schema document.
|
||||
|
||||
The message content itself would include the actual list of choices (both for consistency with the message and for backward compatibility) in this format:
|
||||
|
||||
- message text: any number of lines.
|
||||
- an empty line indicating the beggining of choices section.
|
||||
- an optional non-empty line that does not start from "-" that will be interpreted as a header for choices. It could be "Choose:" or "Select:" or "Send one of:" or absolutely anything that would only be shown in the old clients as part of the message and as a title for choices in the new client (e. g., the title of confirmation dialogue).
|
||||
- choices starting from "-" (hyphen) and " " (space characters). It will be shown on the button as is, unless `button` has `text` property. It will be sent in response, together with the optional tag.
|
||||
```
|
||||
|
||||
This allows to program backwards compatible bots, e.g. for the directory service bot the message could be:
|
||||
|
||||
```
|
||||
@@ -38,6 +38,17 @@
|
||||
</description>
|
||||
|
||||
<releases>
|
||||
<release version="6.2.0" date="2024-12-08">
|
||||
<url type="details">https://simplex.chat/blog/20241210-simplex-network-v6-2-servers-by-flux-business-chats.html</url>
|
||||
<description>
|
||||
<p>New in v6.2:</p>
|
||||
<ul>
|
||||
<li>SimpleX Chat and Flux made an agreement to include servers operated by Flux into the app – to improve metadata privacy.</li>
|
||||
<li>Business chats – your customers privacy.</li>
|
||||
<li>Improved user experience in chats: open on the first unread, jump to quoted messages, see who reacted.</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="6.1.1" date="2024-10-18">
|
||||
<url type="details">https://simplex.chat/blog/20241014-simplex-network-v6-1-security-review-better-calls-user-experience.html</url>
|
||||
<description>
|
||||
|
||||
Reference in New Issue
Block a user