Сервисы в voip телефонах

Чтобы начать использовать сервисы в телефонах Cisco нужно в конфиг файл телефона добавить строки:

Для Cisco 7910(7911, 7941)^

1
<servicesurl>http://10.0.1.1/cisco/directory.php</servicesurl>

для 7940:

1
services_url: "http://10.0.1.1/cisco/directory.php"


где 10.0.1.1 – сервер с apache и php

Там я создал пару php скриптов спертых с http://www.voip-info.org/
directory.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
  header("Content-type: text/xml");
  header("Connection: close");
  header("Expires: -1");
?> 
<CiscoIPPhoneMenu>
<Title>My_Firma</Title>
<Prompt>Kakoe-to privetstvie</Prompt>
<MenuItem>
<Name>Kyiv</Name>
<URL>http://10.0.1.1cisco/kyiv/kyiv.php</URL>
</MenuItem>
<MenuItem>
<Name>Odessa</Name>
<URL>http://10.0.1.1/cisco/odessa/odessa.php</URL>
</MenuItem>
<MenuItem>
<Name>Weather</Name>
<URL>http://10.0.1.1/cisco/weather.php</URL>
</MenuItem>
</CiscoIPPhoneMenu>

это просто для генерации корневого меню в котором можно глянуть номера телефонов двух филий либо посмотреть погоду.
файл с телефонным справочником должен отдавать xml с такой структурой:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
  header("Content-type: text/xml");
  header("Connection: close");
  header("Expires: -1");
?> 
<CiscoIPPhoneDirectory>       
   <Title>Users</Title>
   <Prompt>People reachable via VoIP in my company</Prompt>                    
   <DirectoryEntry>                                              
      <Name>Aleksey xxxxxx</Name>         
      <Telephone>8050</Telephone>
   </DirectoryEntry>                                      
   <DirectoryEntry>             
      <Name>Nastya xxxxxx</Name>       
      <Telephone>8051</Telephone>                                            
   </DirectoryEntry>      
</CiscoIPPhoneDirectory>

Чтоб не мучатся с составлением списка телефонов – можно распарсить sip.conf
Вот примерно так выглядит парсер:

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
<?
header("Content-type: text/xml");
header("Connection: close");
header("Expires: -1");
 // location of asterisk config files
 $location = "/var/www/"; # либо на ходу из /etc/asterisk/
 $dirname = "Company Directory";
 
  // parse sip.conf
  $sip_array = parse_ini_file($location."sip.conf", true);
  reset($sip_array);
 
 
echo "<CiscoIPPhoneDirectory>\n";
echo "<Title>".$dirname."</Title>\n";
echo "<Prompt>People reachable via VoIP</Prompt>  ";
 
 
    while (list($key, $val) = each($sip_array)) {
  if (isset($val["callerid"]))
	{echo "\n<DirectoryEntry>\n";
	$caller = substr($val["callerid"],0,strpos($val["callerid"],'<',4));
	echo  "<Name>".$caller."</Name>\n".
        "<Telephone>".$key."</Telephone>\n";
        echo "</DirectoryEntry>\n";
        }
    }
 
echo "\n<Prompt>Choose Name and Press Dial</Prompt>\n";
echo "</CiscoIPPhoneDirectory>\n";
?>

так получилось для моего конфига , если не подойдет – можно взять с voip-info пример и его помучать
Так-же можно в сервис всунуть прогноз погоды….
Я пока только тренируюсь, поэтому у меня стоит тестовый парсер погоды с yahoo, выглядит он примерно так:

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?
  header("Content-type: text/xml");
    header("Connection: close");
      header("Expires: -1");
      ?>
<?php
 
class YahooWeather {
	// Ветер
	public $wind_chill;
	public $wind_direction;
	public $wind_speed;
 
	// Атмосферные показатели
	public $humidity;
	public $visibility;
	public $pressure;
 
	// Время восхода и заката переводим в формат unix time
	public $sunrise;
	public $sunset;
 
	// Текущая температура воздуха и погода
	public $temp;
	public $condition_text;
	public $condition_code;
 
	// Прогноз погоды на 5 дней
	public $forecast;
 
	public $units;
 
	function __construct($code, $units = 'c', $lang = 'en') {
		$this->units = ($units == 'c')?'c':'f';
 
		$url = 'http://xml.weather.yahoo.com/forecastrss?p='.
			$code.'&u='.$this->units;
 
		$xml_contents = file_get_contents($url);
		if($xml_contents === false) 
			throw new Exception('Error loading '.$url);
 
		$xml = new SimpleXMLElement($xml_contents);
		// Ветер
		$tmp = $xml->xpath('/rss/channel/yweather:wind');
		if($tmp === false) throw new Exception("Error parsing XML.");
		$tmp = $tmp[0];
 
		$this->wind_chill = (int)$tmp['chill'];
		$this->wind_direction = (int)$tmp['direction'];
		$this->wind_speed = (int)$tmp['speed'];
 
		// Атмосферные показатели
		$tmp = $xml->xpath('/rss/channel/yweather:atmosphere');
		if($tmp === false) throw new Exception("Error parsing XML.");
		$tmp = $tmp[0];
 
		$this->humidity = (int)$tmp['humidity'];
		$this->visibility = (int)$tmp['visibility'];
		$this->pressure = (int)$tmp['pressure'];
 
		// Время восхода и заката переводим в формат unix time
		$tmp = $xml->xpath('/rss/channel/yweather:astronomy');
		if($tmp === false) throw new Exception("Error parsing XML.");
		$tmp = $tmp[0];
 
		$this->sunrise = strtotime($tmp['sunrise']);
		$this->sunset = strtotime($tmp['sunset']);
 
		// Текущая температура воздуха и погода
		$tmp = $xml->xpath('/rss/channel/item/yweather:condition');
		if($tmp === false) throw new Exception("Error parsing XML.");
		$tmp = $tmp[0];
 
		$this->temp = (int)$tmp['temp'];
		$this->condition_text = strtolower((string)$tmp['text']);
		$this->condition_code = (int)$tmp['code'];
 
		// Прогноз погоды на 5 дней
		$forecast = array();
		$tmp = $xml->xpath('/rss/channel/item/yweather:forecast');
		if($tmp === false) throw new Exception("Error parsing XML.");
 
		foreach($tmp as $day) {
			$this->forecast[] = array(
				'date' => strtotime((string)$day['date']),
				'low' => (int)$day['low'],
				'high' => (int)$day['high'],
				'text' => (string)$day['text'],
				'code' => (int)$day['code']
			);
		}
	}
 
	public function __toString() {
		$u = "°".(($this->units == 'c')?'C':'F');
		return $this->temp.' '.$u.', '.$this->condition_text;
	}
}
 
?>
 
<?php
 
try {
	$weather = new YahooWeather('UPXX0016');
} catch(Exception $e) {
	echo "Caught exception: ".$e->getMessage();
	exit();
}
 
try {
	$weather1 = new YahooWeather('UPXX0021');
} catch(Exception $e) {
	echo "Caught exception: ".$e->getMessage();
	exit();
}
 
 
echo "
<CiscoIPPhoneText>
  <Title>Kyiv</Title>
    <Prompt>current temperature</Prompt>
      <Text> Now in Kyiv ".$weather->temp."C
      Now in Odessa ".$weather1->temp."C</Text>";
echo "</CiscoIPPhoneText>";
 
?>

В данном случае я показываю температуру для Киева и Одессы… если подправить, то можно получить отсюда погоду на 5 дней… ветер, влажность, облачность и т.д.

Добавить комментарий