skype ボイスチャット自動招待ソフト「MARIMO」
[ソフトウェアのダウンロードはこちら]
http://haijindiary.seesaa.net/article/51990861.html[一行紹介]
Skypeのボイスチャットのホストを支援するソフトです。特定の発言があると、ホストは発言者をボイスチャットに招待するなどができます。
[説明]
メニューの「作動」もしくは、「作動」チェックボックスにチェックを入れる事で、本ソフトウェアはskypeを監視します。
もし、「招待キー」の発言が一致した場合、ソフト利用者は、発言者をボイスチャットに招待します。
ソフト利用者が、既にボイスチャットしていた場合、そのボイスチャットに招待します。
発言者を招待し、発言者を呼び出し中の時に招待キーを発言されても、招待する事ができません。
その時、ソフト利用者はチャットルームに混雑エラーの文を発言します。
特定の発言がたまにスルーされる事があります。その時は、2回発言してください。
[ソフトウェアのダウンロードはこちら]
http://haijindiary.seesaa.net/article/51990861.html*****開発日誌
元々はnicochatについていた機能ですが、精度をより向上&軽量化のために、
そのシステムを全部、最初から作り直しました。
Skype公式APIの関数などはこちらを使用
Skype Public API 1.2 documentation:
SkypeAPI Docs/ArchivesSkype Public API 1.2 documentation 日本語版Skype API Reference 1.4 英語版skypeの特殊な動作を把握していないと、かなりわかりづらい・・・
あと、翻訳かレイアウトがおかしいのか
意外にも、日本語版より、英語版のほうがわかりやすい オススメ
Skype API For Java (Japanese)こういう素晴らしいモノがあるので、こちらを使うとプログラミングが非常に簡単になるかも
>Skype APIは文字列ベースの仕組みのため、そのままでは非常に使いにくいものとなっています。
使いにくすぎ
プログラム上でskypeのボイチャをかける操作は、二通りある。
1つは、SkypeAPIではなく、チャットルームで
/call skype名
と発言すると、 そのskype名の人にボイチャをかける事ができる。
プログラムで、アクティブなチャットルームIDを取得し、そのチャットルームへ発言するやり方。以後A方式と呼ぶ
ちなみに、skype名は英数のみだろうから問題ないのだが、
プログラム上からskypeのアクティブなチャットルームへの発言の際に、日本語などの文字を送る場合、
skypeの文字エンコードはShift-JISではなく、UTF8であるため、
Shift-JIS→UTF8 への変換作業をしなくてはならない。
nicochatはこの skypeのアクティブなチャットルームに「/call skype名」で、自動招待を実現しているのだが、
どうもおかしな問題があるらしく、
一部の利用者が 「/call skype名」 と発言し表示しているのだ
通常だったら、「/call skype名」と発言した場合、文字は表示されず、ただそのskype名をボイチャに招待するはずなのだが、
なぜか「/call skype名」と発言、表示するため、そのskype名を招待する事はない。
もちろんスペースが入っているなどということもない 原因がまったくWA・KA・RA・N☆
また、詳細は忘れてしまったが、「,」などを使う事により、複数の人を同時にボイチャへ誘う事ができるが、
skype名に「,」を付けている場合、 例えば「AAA,BBB」というskype名の人を呼び出すために/callをすると、
AAA と BBB さんを呼び出してしまう という問題が発生する。
skype名に 「,」 が使えるなんて知らなかったわ・・・
さて、nicochatに使われているこの方法だと、いろいろ限界がある訳で、
もう一つの方法は・・・
skype APIを利用してskypeボイスチャットへ招待する方法
SkypeAPI の CALL を使う
やり方は、 skypeに、「CALL skype名」と送ってやればいいだけ。
以後このやり方をB方式と呼ぶ。
まぁ、簡単な訳なんですよ
なら最初話した面倒なA方式より、簡単なB方式をやれよ って話しなんですが、
B方式にはB方式の問題があり、A方式では吐かないエラー
「ERROR 96 CALL: A call exists in ROUTING/RINGING/EARLYMEDIA state」
というエラーを吐いてしまう。
意味は、 「既に 通話中/呼び出し中/EARLY MEDIA(知らん) のボイチャが存在しています」
「通話中」に使えない っていう時点で、当初の目的のボイチャ自動招待ができなくなってしまう。
skypeAPIのサンプルを見ると、CALLを使う前に、現在のボイチャを保留にしている。
保留状態ならCALLが可能らしい
ためしに、Skype通話音声テストを呼び出して、通話中にしてから、保留にしてみると、
skype通話音声テスト 保留にしたら落ちやがった'A`
ここら辺から友達使い出して開発ですよ
モノスゲーちょくちょくやるんで、付き合わせるのは悪いなぁ とか思ってたけど・・・ 仕方ないんだ
で、保留中の呼び出しは成功を確認したが、
次、「呼び出し中」のユーザーを保留にする事ができない。
A方式と違い、一斉に!joinが来た場合、 招待できるのは一人だけ となってしまう。
これはどうしようもないので、混雑した場合は「混雑」というエラーを発言するようにした。
また、人数が増えてきた場合、そのユーザー全てを保留にする のは面倒
文字列ベースの処理 という事もあってか ほんと面倒な処理になってしまう。
更にひどいのはskypeのボイチャを終了したユーザーがいるのに、
プログラムで取得したskypeのログでは、そのユーザーはまだ存在している とかね
ユーザー一覧情報はあてにならない。存在しないユーザーに処理をかけるとエラーを吐く。
エラーを吐いてもいいとして、 一番問題なのは、
「現在のボイチャに招待」する場合、
SkypeAPIによると、
SET CALL
JOIN_CONFERENCE
- call ID (numeric) to join into;
- master call ID, where is another call's ID.
もしここで、実際には存在しないゴーストIDを入れたとしたら・・・
つまり、SkypeAPIに従っていただけじゃ、黒ヒゲ一発ゲームな訳なんですよ。
このように、想定外の問題が非常に多いので、実際にプログラムを動かしながら開発していこうと思ってたら、
今度は・・・
IP電話のスカイプで大規模障害、2日間サービス不能に
エアーマンが倒せないんですよ

skypeを多重起動して、実験を全部1つのPCでやってたから、





エアーマンがこれまた多いんですよ
これがずっとクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクルクル
もうね アフォかと ヴァカかと
たまに全部エアーマン倒せてて、じゃ、実験再開するか と思ってみても、
発言したテスト用の「!join」が、MARIMO搭載したskype本体に送られてこなくて、
気づいたら、 クルクルクrクルク(ry
別の実験でskype通話テストとのログ取ってる最中に、 数時間遅れで先ほどの!joinがきて、ログが乱れる訳ですよ
ファビョーン!
さてさて、最初は技術とかを書いてたが、気づいたら、かなりの愚痴日誌になってしまった。
まぁとにかく、そんなこんなでB方式で作られた自動招待システムが、「MARIMO」 という訳なのさ
MARIMOが動かなくなって、MARIMO再起動したら直った っていう報告受けたので、
定期的にMARIMOを再起動するようにしてやったのさ アーハッハッハッ!!!
今のところ、正常・・・ なんで、ベクターに申請してみる。
nicochatの自動招待機能を消して、
nicochatのところに、MARIMOの事でも紹介しておこうかな
//*****追記
今までのボイチャ自動招待は、すぐにエラー吐いたりで大変だったが、
今回のボイチャ自動招待はかなり安定してる
しかし、
skypeエクストラ
に登録する日は来るのだろうか・・・