Создание корректной ссылки на Skype на вашем сайте

Мессенджеры *PHP * Еще давно я хотел иметь свой автоответчик или бота для скайпа, называйте как вам угодно. В гугле я ничего найти не мог, да еще из-за того, что я пользуюсь Ubuntu, задача становилась сложнее в несколько раз. А если учесть, что я знаю только PHP, и то, не очень хорошо, моя мечта становилась нереальной. Но недавно, просматривая официальную документацию по API скайпа, я обратил внимание на «D-BUS messaging», не знаю, почему я раньше не обращал на него внимание. Разобравшись со всем, я наконец сделал то, что давно хотел! Я получил доступ к Skype API на PHP. Об этом я и хочу рассказать в своей статье. Для установки dbus-php нужен phpize, который идет в пакете php5-dev, установим его:

sudo apt-get install php5-dev 

Теперь установим php-pear, выполнив такие команды:

sudo apt-get install php-pear pear install PEAR 

Устанавливаем dbus расширение для php, предварительно установив зависимости(У Вас должен быть установлен make, иначе установка dbus-beta завершится ошибкой!):

sudo apt-get install libdbus-1-dev libxml2-dev pecl install dbus-beta 

Добавляем загрузку расширения в конфигурацию php:

echo -e "; configuration for php DBus modulenextension=dbus.so"| sudo tee -a /etc/php5/conf.d/dbus.ini 

Проверяем, работает ли расширение, вводим в терминале команду php -i и находим там:

dbus  Dbus support => enabled Version => 0.1.0 

Нашли? Отлично! Можете продолжать! Не нашли? Что же, повторите все, найдите ошибку, исправьте и продолжайте чтение, у Вас все выйдет. Все! Теперь у нас есть все необходимое для работы. Приступим к самому коду php. Самое простое и важное — подключение к скайпу и запрос на доступ к api, сделаем мы это таким образом:

$dbus = new Dbus(Dbus::BUS_SESSION, true); //Инициализируем Dbus $n = $dbus->createProxy('com.Skype.API', '/com/Skype', 'com.Skype.API'); //Подключаемся к скайпу $n -> Invoke('NAME PHP'); //Имя нашей программы, авторизация в скайпе $n -> Invoke('PROTOCOL 8'); //Используем последний протокол 

Метод Invoke() будет основным для отправки указаний скайпу. Теперь, научим наш скрипт получать уведомления скайпа:

//продолжение предыдущего отрывка кода class phpSkype { public static function notify ($notify) {     echo $notify."n"; } }  $dbus -> registerObject('/com/Skype/Client', 'com.Skype.API.Client', 'phpSkype'); //Регистрируем просмотр уведомлений скайпа  while(1) { $s = $dbus -> waitLoop(1); } 

Запустив этот скрипт, вы сможете наблюдать все уведомления скайпа, примерно так:

CONNSTATUS ONLINE CURRENTUSERHANDLE *my_user* USERSTATUS DND CHATMESSAGE 5150665 STATUS READ CHATMESSAGE 5149961 STATUS READ CHATMESSAGE 5149993 STATUS READ CHATMESSAGE 5150025 STATUS READ CHATMESSAGE 5150057 STATUS READ CHATMESSAGE 5150697 STATUS SENDING CHAT #zaidin16/$e00fc2f75170ec9e ACTIVITY_TIMESTAMP 1345401315 CHATMESSAGE 5150697 STATUS SENT 

Дополняем класс phpSkype и обучаем наш скрипт обрабатывать и отвечать на сообщения, вот что получилось у меня:

  $dbus = new Dbus(Dbus::BUS_SESSION, true); //Инициализируем Dbus $n = $dbus->createProxy('com.Skype.API', '/com/Skype', 'com.Skype.API'); //Подключаемся к скайпу $n -> Invoke('NAME PHP'); //Имя нашей программы, авторизация в скайпе $n -> Invoke('PROTOCOL 8'); //Используем последний протокол  class phpSkype {  /* * Эту функцию мы будем использовать для проверки последних сообщений в скайпе. * Если вы не хотите, чтобы программа реагировала на ваши сообщения, используйте * preg_match('/RECEIVED/', $notify) */  public static function notify ($notify) {  if (preg_match('#RECEIVED|SENT#Uis', $notify)) { $message_id = explode(' ', $notify); bot::get_details($message_id[1]); //Вызываем обработчик сообщений     } } }  class bot {  private static $last_id;  public static function get_details ($message_id) { global $n;  $ch = $n -> Invoke('GET CHATMESSAGE '.$message_id.' CHATNAME'); //Получаем id чата, используется для ответа $mess = $n -> Invoke('GET CHATMESSAGE '.$message_id.' BODY'); //Получаем текст сообщения $aut = $n -> Invoke('GET CHATMESSAGE '.$message_id.' FROM_DISPNAME'); //Получаем автора сообщения  /* * Теперь мы получим из строк, которые мы только что получили, нужные нам данные. * А именно: Автора сообщения, id чата и текст сообщения. */  $author = explode('FROM_DISPNAME ', $aut); $chat = explode('CHATNAME ', $ch); $message = explode('BODY ', $mess);  echo $author[1].': '.$message[1]."n"; //Выводим в консоль автора и сообщение  /* * Мне не нужно, чтобы бот пытался найти ответ на каждое сообщение, из-за этого * я вызываю обработку сообщения только когда оно начинается на "!". */  if ($message[1][0] == '!') {  self::reply($chat[1], $message[1], $message_id); } }  public function reply ($chat, $message, $id) { global $n;  /* * Проверки, больше ли id сообщение, на которое нужно ответить, изначально не было, но * мои любезные друзья начали загружать бота кучей "!test" в одном сообщении, он хоть и отвечал * лишь на первое, но потом ответил и на остальные. Из-за этого я сделал проверку и если id * сообщения, на которое нужно ответить, меньше чем id предыдущего, то ответа не будет. */          self::$last_id = $message;          if (self::$last_id <= $message) {                  switch ($message) { case '!test': $reply = 'It's work!'; break;  case '!help': $reply = 'Нету, пока нету'; break;  default: $reply = 'Используйте !help'; break; } if ($reply != '') $n -> Invoke('CHATMESSAGE '.$chat.' '.$reply); //Посылаем сообщение } else { echo 'Уже отвечал!'."n";  } }     }  $dbus -> registerObject('/com/Skype/Client', 'com.Skype.API.Client', 'phpSkype'); //Регистрируем просмотр уведомлений скайпа  while(1) { $s = $dbus -> waitLoop(1); }   

Теперь наш скрипт умеет отвечать на определенные сообщения, а если Вы немного его измените — сможет отвечать на любые сообщения. Если навскидку подумать, можно реализовать что-то интересное на сайте, если он хостится на вашем компьютере, ну или через связку скрипта на локалхосте и на хостинге, это уже как Вы придумаете. Подробный список команд, которые доступны через метод Invoke() Вы найдете тут. А [Неактуально из-за действий Microsoft’a] исходники и более функциональный скрипт. Все это я делал в системе Ubuntu 12.04 LTS, работу на остальных системах не гарантирую и буду рад, если кто-то проверит. Любые идеи приветствуются. Спасибо за чтение!

Всем привет.

Если вам нужно установить активную кнопку skype на сайт, с возможностью связаться с вами прямо с сайта, то это статья как раз то что вам нужно.

     function getSkypeStatus($login = false){      if(!$login){          //логин скайп по умолчанию, если не передан другой          $login = 'echo123';      }      /*      возвращаемые статусы      2 - онлайн      1 - оффлайн      0 - нет такого пользователя      */      $status = file_get_contents('http://mystatus.skype.com/'.$login.'.num');        $off = (int)$status == 2 ? '' : ' skype-off';        $show = ' ';        //добавляем ссылки на звонок/чат      $show .= ' '.$login.' начать чат      позвонить';        return $show;  }    //в том месте где нужно вывести статус скайп на сайте вызываем функцию  echo getSkypeStatus();     

Вот пример стилей для оформления готовой кнопки.

  .skype {      background: url("/images/skype.gif") no-repeat scroll 0 0 transparent;      display: inline-block;      height: 26px;      margin-bottom: -10px;      width: 26px;  }  .skype-off{      background-position: 0 -26px;  }  

А вот и сама картинка со значками скайпа для сайта.

На этом все, надеюсь помог вам.

Статус скайп на сайтеimage

Очень часто я получаю вопросы от своих подписчиков, что они всё делают правильно, однако, у них всё равно почему-то Denwer отказывается понимать новые хосты (а также localhost), либо вовсе не открывая хост, либо открывая белый экран. Если у Вас стоит на компьютере Denwer и Skype, то они будут конфликовать, и этот конфлит будет вызывать выше описанные проблемы. Связан этот конфликт с тем, что они и Denwer, и Skype хотят работать через 80-й порт. Как эту ошибку исправить, я сейчас поясню.

Варианта решения проблемы два:

  • Не пользоваться одновременно Denwer и Skype.
  • Исправить порты по умолчанию у Skype.

Первый вариант очень простой, который требует следующего: когда включён Denwer, выключите Skype, а когда нужен Skype, выключайте Denwer. Но данный способ не очень удобен, поэтому есть второе решение проблемы – изменение порта по умолчанию у Skype.

Для этого сделайте следующие шаги в Skype:

  • В меню “Инструменты” выберите пункт “Настройки“.
  • Выберите вкладку “Дополнительно“.
  • Далее выберите “Соединение“.
  • Уберите галочку с пункта: “Использовать порты 80 и 443 в качестве входящих альтернативных“.
  • Нажмите на кнопку “Сохранить“.

Всё, теперь конфлита не будет, и Вы сможете одновременно создавать свои сайты, а также быть в сети Skype.

  • image Создано 19.10.2011 15:02:37
  • Михаил Русаков
17 сен

Когда у вас серьезная организация, нужно позаботиться о том, чтобы ваши клиенты могли связаться с вами самыми разными способами.

Одним из таких способов является Skype. Сама по себе программа, думаю, не нуждается в представлении.

Почему стоит сделать акцент на контактах? Сейчас такое время, что многие недоброжелатели пытаются представиться вашей организацией и таким образом обманывают ваших клиентов от как бы вашего лица. Добавляют цифры к логину Skype, меняют местами буквы или придумывают еще какие-нибудь уловки.

Чтобы избежать этого, существует специальный вид ссылок, при нажатии на которые человеку сразу открывается Skype с указанным в ссылке пользователем.

Какие именно типы ссылок бывают, я сейчас расскажу.

1. Стандартная ссылка.

 Название ссылки

При нажатии на такую ссылку человеку будет предложен звонок указанному пользователю.

2. Ссылка для звонка.

 Название ссылки    Название ссылки   Название ссылки

Первая ссылка в этом примере эквивалентна первому варианту ссылки (стандартная ссылка) и совершает вызов на указанный Skype пользователя при нажатии. Вторая же ссылка выполняет вызов на обычный телефон. А третья – позволяет создать конференцию, собрав, тем самым, в одном звонке нескольких человек.

3. Ссылка для создания чата.

 Название ссылки   Название ссылки 

При нажатии на первую ссылку человеку откроется обычное окно для обмена сообщениями. При нажатии на вторую ссылку – создастся чат, куда будут приглашены перечисленные пользователи.

4. Ссылка на добавление контакта.

 Название ссылки

При нажатии на такую ссылку человеку предлагается добавить пользователя в свой список контактов.

Это, так сказать, основные и самые распространенные типы ссылок, которые используют вебмастера на своих сайтах.

Но помимо этого существует еще ряд ссылок, которые, возможно, вы используете в своих целях.

5. Ссылка для создания голосовой почты.

 Название ссылки

При нажатии на такую ссылку человеку будет предложено записать голосовое письмо для указанного пользователя.

6. Ссылка для передачи файлов.

 Название ссылки    Название ссылки 

При нажатии на такого рода ссылку человеку предлагается передать файл указанному пользователю. Вторая ссылка – отправка файла группе лиц.

7. Ссылка на запрос персональной информации.

 Название ссылки

При нажатии на такую ссылку пользователю будет предложено посмотреть информацию об указанном человеке.

Помимо того, что такие ссылки на 100% соединят ваших клиентов с указанными контактами, это во многом облегчает и ускоряет связь с вами.

-5

Мне было интересно, можно ли отправлять скайп-сообщения с php без установки скайпа. Так что вы входите в php и отправляете сообщения без каких-либо приложений. Это возможно.

благодаря

69

Вот хороший ответ.

tl; dr: Это не легко возможно из PHP или node.js

49

В настоящее время я не знаю о API, который существует в Skype для PHP.

Chat with Skype demo user 

Я считаю, что в настоящее время – или, как он есть, это единственный способ добиться чего-то как такового. Это интегрирует протокол Skype для использования.

Однако вы можете взглянуть на это: Skype с PHP.

Но насколько это точно, я не уверен

Ваш ответ

Оцените статью
Рейтинг автора
4,8
Материал подготовил
Егор Новиков
Наш эксперт
Написано статей
127
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий