SimpleX Chat
目次
SimpleX Chat は、連絡先もグループも自分の手元に置いておける、プライバシー重視の分散型のメッセージングです。ほかの経路と違い、SimpleX には持ち主を示す固定の ID がありません。連絡先はつながった時点で作られる、中身のわからない内部の ID で区別されます。いま使えるメッセンジャーの中でも、とりわけプライバシーに寄ったつくりです。
> hermes gateway setup を動かして SimpleX を選ぶと、手順に沿って設定できます。
事前に必要なもの
- simplex-chat の CLI を入れて、常駐させておくこと
- Python のパッケージ websockets(
pip install websockets)
simplex-chat を入れる
simplex-chat の GitHub リリース のページから、最新版をダウンロードします。
# Linux / macOS binary
curl -L https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex-chat-ubuntu-22_04-x86_64 -o simplex-chat
chmod +x simplex-chatSimpleX Chat のプロジェクトは、チャットのクライアント用に組み立て済みの Docker のイメージを配っていません。Docker で動かしたい場合は、simplex-chat のリポジトリ からソースを取ってきて自分でビルドしてください。
常駐させる
simplex-chat -p 5225初期状態では、ws://127.0.0.1:5225 の WebSocket で待ち受けます。
Hermes を設定する
セットアップウィザードから
hermes gateway setupSimpleX Chat を選び、表示に従って進めます。
環境変数から
~/.hermes/.env に次を書き足します。
SIMPLEX_WS_URL=ws://127.0.0.1:5225
SIMPLEX_ALLOWED_USERS=<contact-id-1>,<contact-id-2>
SIMPLEX_HOME_CHANNEL=<contact-id>| 変数 | 必須 | 説明 |
|---|---|---|
SIMPLEX_WS_URL |
はい | simplex-chat の常駐プロセスの WebSocket の URL |
SIMPLEX_ALLOWED_USERS |
入れておくのがおすすめ | 許可する相手をカンマ区切りで指定します。一つずつ、数字の contactId でも表示名でも書けます。 |
SIMPLEX_ALLOW_ALL_USERS |
任意 | true にすると、すべての連絡先を許可します(扱いに注意してください) |
SIMPLEX_AUTO_ACCEPT |
任意 | 届いた連絡先の申請を自動で受け入れます(初期値: true) |
SIMPLEX_GROUP_ALLOWED |
任意 | ボットが参加するグループの ID をカンマ区切りで指定します。どのグループでもよければ * にします。書かない場合、グループのメッセージはすべて無視します |
SIMPLEX_HOME_CHANNEL |
任意 | 定期実行の仕事の届け先になる、連絡先またはグループの ID |
SIMPLEX_HOME_CHANNEL_NAME |
任意 | ホームチャンネルにつける、人が読むための名前 |
HERMES_SIMPLEX_TEXT_BATCH_DELAY |
任意 | 続けざまに届いた文字のメッセージを一つのできごとにまとめるための、静かになるまで待つ秒数(初期値: 0.8) |
連絡先の ID や表示名を調べる
常駐させたあと、エージェントの連絡先との会話を開きます。数字の contactId は、セッションの記録に出てきます。SimpleX の画面に出ている表示名のほうが使いやすければ、それでもかまいません。SIMPLEX_ALLOWED_USERS はどちらの書き方も受け付けます。
誰が使えるか
初期状態では すべての連絡先が拒否 されます。次のどちらかを行ってください。
SIMPLEX_ALLOWED_USERSに、contactIdや表示名をカンマ区切りで並べます(たとえばSIMPLEX_ALLOWED_USERS=4,aliceなら、contactId が 4 の相手か、表示名が「alice」の相手のどちらにも当てはまります)。- 個別チャットでのペアリング を使います。ボットに何かメッセージを送るとペアリングコードが返ってくるので、そのコードを
hermes pairing approve simplex <CODE>で入力します。
グループでのやり取り
初期状態では、アダプターはグループのメッセージを無視します。そうしないと、グループに 入れたボットが全員のやり取りを処理してしまうからです。使いたいときは、はっきり指定します。
SIMPLEX_GROUP_ALLOWED=12,34 # specific group IDs
# or
SIMPLEX_GROUP_ALLOWED=* # any group the bot is inグループを宛先にするときは、チャットの ID の前に group: を付けます。たとえば 定期実行の deliver= の宛先や hermes send の呼び出しでは simplex:group:12 と書きます。
hermes send で送る
SimpleX は単体の送信先としても使えます。常駐プロセスは動いている必要がありますが、 文字だけを送るならゲートウェイが動いていなくてもかまいません。
hermes send --to simplex:alice "hello" # DM by contact display name
hermes send --to simplex:group:12 "hello" # group by numeric ID
hermes send --to simplex "hello" # SIMPLEX_HOME_CHANNELゲートウェイが動いているあいだ、アダプターは連絡先と許可したグループを数え上げて 届け先の一覧に載せるので(5 分ごとに更新されます)、hermes send --list に名前が 出てきます。ゲートウェイを一度も動かしていないうちは、この経路は --list に 「no channels discovered yet」という案内つきで出ます。上のような直接の宛先は、 それとは関係なく使えます。
添付ファイル
アダプターは、SimpleX そのものの添付を送受信のどちらにも対応しています。
- 受信 — 届いた画像、音声メモ、ファイルは、常駐プロセスの XFTP の流れ
(rcvFileDescrReady → /freceive → rcvFileComplete を待つ)で受け取り、 ふさわしい MessageType(PHOTO、VOICE、TEXT と書類)を付けて MessageEvent.media_urls として渡されます。
- 送信 —
send_image_file、send_voice、send_document、send_videoは
いずれも filePath を含む /_send の形を使います。そのため、受け取った側の SimpleX のクライアントでは、画像がその場に表示され、音声メモもその場で再生でき、 ダウンロードを促されることはありません。
エージェントの返事には、文章の中に MEDIA:/path/to/file という印を書くこともできます。 アダプターはその印を本文から取り除き、ファイルを音声メモ(音声の拡張子の場合)か 書類として送ります。
SimpleX を定期実行の仕事で使う
cronjob(
action="create",
schedule="every 1h",
deliver="simplex", # uses SIMPLEX_HOME_CHANNEL
prompt="Check for alerts and summarise."
)定期実行の仕事の deliver: で相手を名指しすることもできますし、シェルのスクリプトから hermes send の CLI を使うこともできます。
hermes send simplex:<contact-id> "Done!"プライバシーについて
- SimpleX は電話番号もメールアドレスも明かしません。連絡先は中身のわからない ID で扱われます
- Hermes と常駐プロセスのあいだは手元の WebSocket(
ws://127.0.0.1:5225)でつながっており、データが端末の外へ出ることはありません - メッセージは常駐プロセスに届く前に、SimpleX のプロトコルによって端末どうしのあいだだけで暗号化されています
困ったときは
「Cannot reach daemon」と出る — simplex-chat -p 5225 が動いていることと、ポートが SIMPLEX_WS_URL と合っていることを確かめます。
「websockets not installed」と出る — pip install websockets を動かします。
メッセージが届かない — その相手の ID が SIMPLEX_ALLOWED_USERS に入っているかを確かめるか、個別チャットでのペアリングで承認します。