Перейти к публикации
Malfarion

Пример Интеграции С 1С

Рекомендованные сообщения

Привожу пример интеграции с 1С для ваших клиентов. Желаю вам в новом году в 2 раза больше пользователей, и чтобы больше ваших разработчиков доводили до ума API (например метод с информацией о текущих звонках).

 

Самое сложное это сформировать заголовок авторизации потому что штатных средств формирования HMAC хэшей в 1С нет. 

&НаСервереФункция ПолучитьПодпись(Метод,Данные) 	Телефония_Key=Константы.Телефония_Key.Получить();	Secret=Константы.Телефония_Secret.Получить();	ScrptCtrl=Новый COMОбъект("MSScriptControl.ScriptControl");	ScrptCtrl.language = "javascript";		ScrptCtrl.AddCode("	|var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */	|var b64pad  = ""=""; /* base-64 pad character. ""="" for strict RFC compliance   */	|var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */	|function Auth_Hash(method,paramsStr,secret){ return base64_encode(hex_hmac_sha1(secret,method + paramsStr + md5(paramsStr)));}	|function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}	|function md5(s)    { return rstr2hex(rstr_md5(str2rstr_utf8(s))); }	|function core_sha1(x, len)	|{	|  /* append padding */	|  x[len >> 5] |= 0x80 << (24 - len % 32);	|  x[((len + 64 >> 9) << 4) + 15] = len;	|	|  var w = Array(80);	|  var a =  1732584193;	|  var b = -271733879;	|  var c = -1732584194;	|  var d =  271733878;	|  var e = -1009589776;	|	|  for(var i = 0; i < x.length; i += 16)	|  {	|    var olda = a;	|    var oldb = b;	|    var oldc = c;	|    var oldd = d;	|    var olde = e;	|	|    for(var j = 0; j < 80; j++)	|    {	|      if(j < 16) w[j] = x[i + j];	|      else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);	|      var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),	|                       safe_add(safe_add(e, w[j]), sha1_kt(j)));	|      e = d;	|      d = c;	|      c = rol(b, 30);	|      b = a;	|      a = t;	|    }	|	|    a = safe_add(a, olda);	|    b = safe_add(b, oldb);	|    c = safe_add(c, oldc);	|    d = safe_add(d, oldd);	|    e = safe_add(e, olde);	|  }	|  return Array(a, b, c, d, e);	|	|}	|	|/*	| * Perform the appropriate triplet combination function for the current	| * iteration	| */	|function sha1_ft(t, b, c, d)	|{	|  if(t < 20) return (b & c) | ((~ & d);	|  if(t < 40) return b ^ c ^ d;	|  if(t < 60) return (b & c) | (b & d) | (c & d);	|  return b ^ c ^ d;	|}	|	|/*	| * Determine the appropriate additive constant for the current iteration	| */	|function sha1_kt(t)	|{	|  return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :	|         (t < 60) ? -1894007588 : -899497514;	|}	|	|/*	| * Calculate the HMAC-SHA1 of a key and some data	| */	|function core_hmac_sha1(key, data)	|{	|  var bkey = str2binb(key);	|  if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);	|	|  var ipad = Array(16), opad = Array(16);	|  for(var i = 0; i < 16; i++)	|  {	|    ipad[i] = bkey[i] ^ 0x36363636;	|    opad[i] = bkey[i] ^ 0x5C5C5C5C;	|  }	|	|  var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);	|  return core_sha1(opad.concat(hash), 512 + 160);	|}	|	|/*	| * Add integers, wrapping at 2^32. This uses 16-bit operations internally	| * to work around bugs in some JS interpreters.	| */	|function safe_add(x, y)	|{	|  var lsw = (x & 0xFFFF) + (y & 0xFFFF);	|  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);	|  return (msw << 16) | (lsw & 0xFFFF);	|}	|	|/*	| * Bitwise rotate a 32-bit number to the left.	| */	|function rol(num, cnt)	|{	|  return (num << cnt) | (num >>> (32 - cnt));	|}	|	|/*	| * Convert an 8-bit or 16-bit string to an array of big-endian words	| * In 8-bit function, characters >255 have their hi-byte silently ignored.	| */	|function str2binb(str)	|{	|  var bin = Array();	|  var mask = (1 << chrsz) - 1;	|  for(var i = 0; i < str.length * chrsz; i += chrsz)	|    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);	|  return bin;	|}	|/*	| * Convert an array of big-endian words to a hex string.	| */	|function binb2hex(binarray)	|{	|  var hex_tab = hexcase ? ""0123456789ABCDEF"" : ""0123456789abcdef"";	|  var str = """";	|  for(var i = 0; i < binarray.length * 4; i++)	|  {	|    str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +	|           hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8  )) & 0xF);	|  }	|  return str;	|}	|	|/*	| * Convert an array of big-endian words to a base-64 string	| */	|	function base64_encode( data ) {	// Encodes data with MIME base64	|	// 	|	// +   original by: Tyler Akins (http://rumkin.com)	|	// +   improved by: Bayron Guevara	|	|	var b64 = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="";	|	var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc='';	|	|	do { // pack three octets into four hexets	|		o1 = data.charCodeAt(i++);	|		o2 = data.charCodeAt(i++);	|		o3 = data.charCodeAt(i++);	|	|		bits = o1<<16 | o2<<8 | o3;	|	|		h1 = bits>>18 & 0x3f;	|		h2 = bits>>12 & 0x3f;	|		h3 = bits>>6 & 0x3f;	|		h4 = bits & 0x3f;	|	|		// use hexets to index into b64, and append result to encoded string	|		enc += b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);	|	} while (i < data.length);	|	|	switch( data.length % 3 ){	|		case 1:	|			enc = enc.slice(0, -2) + '==';	|		break;	|		case 2:	|			enc = enc.slice(0, -1) + '=';	|		break;	|	}	|	|	return enc;	|} //////	|function rstr_md5(s)	|{	|  return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));	|}	|	|/*	| * Calculate the HMAC-MD5, of a key and some data (raw strings)	| */	|function rstr_hmac_md5(key, data)	|{	|  var bkey = rstr2binl(key);	|  if(bkey.length > 16) bkey = binl_md5(bkey, key.length * 8);	|	|  var ipad = Array(16), opad = Array(16);	|  for(var i = 0; i < 16; i++)	|  {	|    ipad[i] = bkey[i] ^ 0x36363636;	|    opad[i] = bkey[i] ^ 0x5C5C5C5C;	|  }	|	|  var hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);	|  return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));	|}	|	|/*	| * Convert a raw string to a hex string	| */	|function rstr2hex(input)	|{	|  try { hexcase } catch(e) { hexcase=0; }	|  var hex_tab = hexcase ? ""0123456789ABCDEF"" : ""0123456789abcdef"";	|  var output = """";	|  var x;	|  for(var i = 0; i < input.length; i++)	|  {	|    x = input.charCodeAt(i);	|    output += hex_tab.charAt((x >>> 4) & 0x0F)	|           +  hex_tab.charAt( x        & 0x0F);	|  }	|  return output;	|}	|	|/*	| * Convert a raw string to a base-64 string	| */	|function rstr2b64(input)	|{	|  try { b64pad } catch(e) { b64pad=''; }	|  var tab = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"";	|  var output = """";	|  var len = input.length;	|  for(var i = 0; i < len; i += 3)	|  {	|    var triplet = (input.charCodeAt(i) << 16)	|                | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0)	|                | (i + 2 < len ? input.charCodeAt(i+2)      : 0);	|    for(var j = 0; j < 4; j++)	|    {	|      if(i * 8 + j * 6 > input.length * 8) output += b64pad;	|      else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F);	|    }	|  }	|  return output;	|}	|	|/*	| * Convert a raw string to an arbitrary string encoding	| */	|function rstr2any(input, encoding)	|{	|  var divisor = encoding.length;	|  var i, j, q, x, quotient;	|	|  /* Convert to an array of 16-bit big-endian values, forming the dividend */	|  var dividend = Array(Math.ceil(input.length / 2));	|  for(i = 0; i < dividend.length; i++)	|  {	|    dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);	|  }	|	|  /*	|   * Repeatedly perform a long division. The binary array forms the dividend,	|   * the length of the encoding is the divisor. Once computed, the quotient	|   * forms the dividend for the next step. All remainders are stored for later	|   * use.	|   */	|  var full_length = Math.ceil(input.length * 8 /	|                                    (Math.log(encoding.length) / Math.log(2)));	|  var remainders = Array(full_length);	|  for(j = 0; j < full_length; j++)	|  {	|    quotient = Array();	|    x = 0;	|    for(i = 0; i < dividend.length; i++)	|    {	|      x = (x << 16) + dividend[i];	|      q = Math.floor(x / divisor);	|      x -= q * divisor;	|      if(quotient.length > 0 || q > 0)	|        quotient[quotient.length] = q;	|    }	|    remainders[j] = x;	|    dividend = quotient;	|  }	|	|  /* Convert the remainders to the output string */	|  var output = """";	|  for(i = remainders.length - 1; i >= 0; i--)	|    output += encoding.charAt(remainders[i]);	|	|  return output;	|}	|	|/*	| * Encode a string as utf-8.	| * For efficiency, this assumes the input is valid utf-16.	| */	|function str2rstr_utf8(input)	|{	|  var output = """";	|  var i = -1;	|  var x, y;	|	|  while(++i < input.length)	|  {	|    /* Decode utf-16 surrogate pairs */	|    x = input.charCodeAt(i);	|    y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0;	|    if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF)	|    {	|      x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);	|      i++;	|    }	|	|    /* Encode output as utf-8 */	|    if(x <= 0x7F)	|      output += String.fromCharCode(x);	|    else if(x <= 0x7FF)	|      output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F),	|                                    0x80 | ( x         & 0x3F));	|    else if(x <= 0xFFFF)	|      output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),	|                                    0x80 | ((x >>> 6 ) & 0x3F),	|                                    0x80 | ( x         & 0x3F));	|    else if(x <= 0x1FFFFF)	|      output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),	|                                    0x80 | ((x >>> 12) & 0x3F),	|                                    0x80 | ((x >>> 6 ) & 0x3F),	|                                    0x80 | ( x         & 0x3F));	|  }	|  return output;	|}	|	|/*	| * Encode a string as utf-16	| */	|function str2rstr_utf16le(input)	|{	|  var output = """";	|  for(var i = 0; i < input.length; i++)	|    output += String.fromCharCode( input.charCodeAt(i)        & 0xFF,	|                                  (input.charCodeAt(i) >>> 8) & 0xFF);	|  return output;	|}	|	|function str2rstr_utf16be(input)	|{	|  var output = """";	|  for(var i = 0; i < input.length; i++)	|    output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF,	|                                   input.charCodeAt(i)        & 0xFF);	|  return output;	|}	|	|/*	| * Convert a raw string to an array of little-endian words	| * Characters >255 have their high-byte silently ignored.	| */	|function rstr2binl(input)	|{	|  var output = Array(input.length >> 2);	|  for(var i = 0; i < output.length; i++)	|    output[i] = 0;	|  for(var i = 0; i < input.length * 8; i += 8)	|    output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32);	|  return output;	|}	|	|/*	| * Convert an array of little-endian words to a string	| */	|function binl2rstr(input)	|{	|  var output = """";	|  for(var i = 0; i < input.length * 32; i += 8)	|    output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF);	|  return output;	|}	|	|/*	| * Calculate the MD5 of an array of little-endian words, and a bit length.	| */	|function binl_md5(x, len)	|{	|  /* append padding */	|  x[len >> 5] |= 0x80 << ((len) % 32);	|  x[(((len + 64) >>> 9) << 4) + 14] = len;	|	|  var a =  1732584193;	|  var b = -271733879;	|  var c = -1732584194;	|  var d =  271733878;	|	|  for(var i = 0; i < x.length; i += 16)	|  {	|    var olda = a;	|    var oldb = b;	|    var oldc = c;	|    var oldd = d;	|	|    a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);	|    d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);	|    c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);	|    b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);	|    a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);	|    d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);	|    c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);	|    b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);	|    a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);	|    d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);	|    c = md5_ff(c, d, a, b, x[i+10], 17, -42063);	|    b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);	|    a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);	|    d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);	|    c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);	|    b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);	|	|    a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);	|    d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);	|    c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);	|    b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);	|    a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);	|    d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);	|    c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);	|    b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);	|    a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);	|    d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);	|    c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);	|    b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);	|    a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);	|    d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);	|    c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);	|    b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);	|	|    a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);	|    d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);	|    c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);	|    b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);	|    a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);	|    d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);	|    c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);	|    b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);	|    a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);	|    d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);	|    c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);	|    b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);	|    a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);	|    d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);	|    c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);	|    b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);	|	|    a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);	|    d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);	|    c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);	|    b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);	|    a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);	|    d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);	|    c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);	|    b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);	|    a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);	|    d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);	|    c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);	|    b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);	|    a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);	|    d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);	|    c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);	|    b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);	|	|    a = safe_add(a, olda);	|    b = safe_add(b, oldb);	|    c = safe_add(c, oldc);	|    d = safe_add(d, oldd);	|  }	|  return Array(a, b, c, d);	|}	|	|/*	| * These functions implement the four basic operations the algorithm uses.	| */	|function md5_cmn(q, a, b, x, s, t)	|{	|  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),;	|}	|function md5_ff(a, b, c, d, x, s, t)	|{	|  return md5_cmn((b & c) | ((~ & d), a, b, x, s, t);	|}	|function md5_gg(a, b, c, d, x, s, t)	|{	|  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);	|}	|function md5_hh(a, b, c, d, x, s, t)	|{	|  return md5_cmn(b ^ c ^ d, a, b, x, s, t);	|}	|function md5_ii(a, b, c, d, x, s, t)	|{	|  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);	|}	|	|/*	| * Add integers, wrapping at 2^32. This uses 16-bit operations internally	| * to work around bugs in some JS interpreters.	| */	|function safe_add(x, y)	|{	|  var lsw = (x & 0xFFFF) + (y & 0xFFFF);	|  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);	|  return (msw << 16) | (lsw & 0xFFFF);	|}	|	|/*	| * Bitwise rotate a 32-bit number to the left.	| */	|function bit_rol(num, cnt)	|{	|  return (num << cnt) | (num >>> (32 - cnt));	|}");	Рез=ScrptCtrl.Run("Auth_Hash",Метод,Данные,Secret);	Возврат Телефония_Key+":"+Рез;КонецФункции&НаСервереПроцедура CallНаСервере(ВнутреннийНомер,ТелефонНазначения) Экспорт	Если ВнутреннийНомер="" тогда		Сообщить("У пользователя не указан внутренний номер.Вызов отменен!");		Возврат;	КонецЕсли;		Метод="/v1/request/callback/";	Данные="format=json&from="+ВнутреннийНомер+"&sip="+ВнутреннийНомер+"&to="+ТелефонНазначения;	     	Заголовки=Новый Соответствие();	Заголовки.Вставить("Authorization",ПолучитьПодпись(Метод,Данные));	HTTP=Новый HTTPСоединение("api.zadarma.com",,,,,,Новый ЗащищенноеСоединениеOpenSSL());	Запрос=Новый HTTPЗапрос(Метод+"?"+Данные,Заголовки);	Ответ=HTTP.Получить(Запрос);КонецПроцедуры

Вам необходимы 2 константы в составе конфигурации :

Телефония_Key
Телефония_Secret

значение которых можно получить https://ss.zadarma.com/api/

 

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

по вопросам можно обращаться andrey.k собака a-system.biz

Поделиться сообщением


Ссылка на сообщение

Спасибо большое!Вас также с Новым Годом и Рождеством!

Поделиться сообщением


Ссылка на сообщение

Для желающих интегрироваться не своими руками есть новость:

Существует уже готовая полная интеграция 1С и АТС Zadarma, (правда эта интеграция не бесплатная) подробней у них на сайте: http://simplit.com.ua/blog/?p=1328

Поделиться сообщением


Ссылка на сообщение

День добрый. В 1с появилась возможность обрабатывать GET запросы. Для этого добавлен объект HTTP-сервис.

 

Пока вернуть проверочный параметр мне не удалось

 

строку для PHP

<?php if (isset($_GET['zd_echo'])) exit($_GET['zd_echo']); ?>

 

в терминах 1с я вижу так

 

Ответ = Новый HTTPСервисОтвет(200);  Если НЕ(Запрос.ПараметрыЗапроса.Получить("zd_echo")=Неопределено) Тогда    Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");    Ответ.УстановитьТелоИзСтроки(Запрос.ПараметрыЗапроса.Получить("zd_echo"));     Возврат Ответ;  КонеЦесли;

 

при проверке через браузер, выводится значение параметра zd_echo.

подскажите, куда нужно запихнуть это zd_echo, или формат, чтоб система приняла ответ?

Поделиться сообщением


Ссылка на сообщение
Героически, с помощью доблестной тех поддержки решено
 
Ответ.УстановитьТелоИзСтроки(Запрос.ПараметрыЗапроса.Получить("zd_echo"),,ИспользованиеByteOrderMark.НеИспользовать);

Поделиться сообщением


Ссылка на сообщение

А почему до сих пор Задарма нет в 1С "из коробки" ?

 

 

Изображение

 

 

Поделиться сообщением


Ссылка на сообщение

Не слышал про интеграцию на уровне API и вебхуков.  То что раньше было требовало отдельных сборок и настроек для каждой версии, потому проще было с посредниками.

 

Насколько знаю все что они делали в сторону нормальной интеграции они делали в "1С CRM" что так-же далеко от 1С как и Битрикс24 :) Но и там на сайте отображается на тему интеграций "Элемент не найден" :)

Поделиться сообщением


Ссылка на сообщение

>> Уточним может что-то у них изменилось.

 

Думаю, нужно поднимать на форуме этот вопрос.

В той же 1С:УНФ есть интерфейс, позволяющий отправить пожелания в 1С по включению сервисов ...

Прямо там же, на странице интеграции телефонии ниже.

 

Там сейчас много сервисов (в том числе от 1С, который работает в виде приложения на мобильном телефоне - может быть и в эту сторону еще посмотреть и доработать свое приложение).

Но Задарма нет :( 

Поделиться сообщением


Ссылка на сообщение

Не уверен что какой-то из сервисов предоставляет интеграцию с 1С бесплатно (установку настройку сопровождение).

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

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

На сейчас я знаю минимум 2-3 сервиса которые за немного денег берут на себя танец с бубном с любой версией 1С и интеграцией с Zadarma. И главное поддержку этого со стороны 1С.

Мы поддержку бухгалтера работающего с 1С делать точно не сможем, либо это тоже будет не бесплатно. А если не бесплатно то все уже есть и очень давно.

Поделиться сообщением


Ссылка на сообщение

Все сервисы подключаются "бесплатно". Настройка в два клика (в поддерживаемых конфигурациях) - поставить галку и указать от 1 до 3 параметров (в зависимости от оператора).

 

Оно работает в два клика (проверил на нескольких операторах). При чем все функции есть, в том числе номера ответственных и т.п.

 

Конфигурация "Управление нашей фирмой", например, достаточно дешевая. При этом телефония есть и в базовой конфигурации (не только в КОРП). То есть за 5400 рублей (с этого года) навсегда получаешь базовую версию, с примитивной CRM, с возможностью фнт грации с телефонией (более 60 операторов), с почтой ... (в базовой версии возможны интеграции только с тем, что есть в конфигурации)

 

Работает из коробки. "Бесплатно"

>> На сейчас я знаю минимум 2-3 сервиса которые за немного денег берут на себя танец с бубном с любой версией 1С и интеграцией с Zadarma.

Вот именно. Уже три компании не захотели сменить телефонию по моему совету из-за интеграции в 1С (там нет Задарма, настраивал же интеграцию "бухгалтер", никаких денег никто никому не платил - но это я проверил).

 

Кроме зоопарка есть и универсальный модуль.

https://its.1c.ru/db/metod81#content:7056:hdoc

Из недостатков - подключить можно только одного оператора (ставишь галку на одного, у другого исчезает).

 

Универсальная интеграция (требует выбрать оператора), но кажется у всех выглядит одинаково.

А вот те которое отдельно - свои параметры (часто вообще один - просто гуид и все).

 

 

Изображение

 

 

Поделиться сообщением


Ссылка на сообщение

Ок спасибо, посмотрим, может у 1С действительно все изменилось за последний год-полтора.

Поделиться сообщением


Ссылка на сообщение

Вряд ли у них что-то изменилось.

Их нужно научиться готовить.

Попробую получить статус Франчайзи, и посмотрю что там у них в документации по этому поводу.

 

И как вариант: раз есть "универсальный" способ, то значит можно подстроиться под него. Вполне возможно, что этот "способ" работает не только в 1С, но и в других местах.

Поделиться сообщением


Ссылка на сообщение

Универсальный способ это API/Webhook.

 

Но как с ними работает 1С (и работает-ли) не знаю. Точно не как в других местах, больше нигде код на кирилице не написан )))

Поделиться сообщением


Ссылка на сообщение

Так как, есть вероятность что в 1С УНФ появится телефония Zadarma? Или не стоит ждать?

Поделиться сообщением


Ссылка на сообщение

Igor, не смотрел, но "Универсальный" в понятии 1С может быть что угодно. Скорее всего да, это стандартизированный API, ибо там уже более 50 операторов по нему работает и всего три поля заполнить.

 

Gendens, теоретически обработку для 1С:УНФ под Задарма найти можно. Именно внешнюю обработку, чтобы не вмешиваться в конфигурацию. Но из все что нормально находится, это украинский производитель с непонятными гарантиями. На инфорстарте при этом его нет (а покупая там получаешь определенную гарантию), при этом они там были несколько лет назад, но теперь нет, отзывы были плохими. На инфостарте можно комбайны найти под Задарма ... но как-то все плохо. При чем в комментариях еще и выводы делают - раз Задарма не добавлена, то это плохая телефония, поэтому никто и не добавляет, так как никому не нужно.

 

При этом API у Задарма вполне нормальная. Есть пара особенностей "ни как у других", но в целом они никак не должны влиять на возможность написать обработку. А вот "универсальные" работать не будут из-за них точно.

Даже задумался себе обработку написать. На управляемых формах и чтобы работало в WEB версии 1С (на своем сервере). Может быть получится и под фрез версию (просто не смотрел еще какие там особенности).

Поделиться сообщением


Ссылка на сообщение

Еще есть из "нормальных" обработчик в "простые звонки".

Поделиться сообщением


Ссылка на сообщение

Еще есть из "нормальных" обработчик в "простые звонки".

Это тоже из серии комбайнов. То есть, появляется промежуточное звено.

Интеграция с Задарма на 5 пользователей (судя по их сайту) стоит 5000 рублей в год.

Какая разница сколько пользователей? Это чистый "маркетинг" ...

 

Но о них не знал, кстати. Да, это вариант.

Поделиться сообщением


Ссылка на сообщение

Судя по всей информации что у меня есть, встроенная интеграция есть только в 1C:УНФ. Им мы написали, они ответили что подумают хотят-ли с нами интегрировать, вот так..

С остальными версиями 1С можно только через "прослойки" например simplit или "простые звонки". Судя по исследованию крупнейших операторов, у всех аналогично.

Поделиться сообщением


Ссылка на сообщение

Я так понял это касается УНФ и ERP (максимальная конфигурация). В остальных просто нет функций CRM систем )) Зачем подключать телефонию в 1С бухгалтеру? А вот менеджеру в УНФ - да, нужно. Кроме это есть куча решений франчайзи и они их делают (если нужны функции CRM) на основе одной из этих двух конфигураций.

Поэтому "у всех аналогично".

 

Но имеем факт, Задарма нет, а куча других операторов в УНФ (одна из самых популярных конфигураций если не для бухгалтера) - есть.

И да, в УНФ куча интеграций, и с Интернет-магазинами, и с ЭДО ...

Но в данном случае интеграция именно с CRM частью УНФ (некоторые только ради нее и покупают УНФ, базовая версия всего 5000 рублей с пожизненными обновлениями), отключая иные модули. Используют только CRM, контрагентов и выставление счетов. А УНФ интегрируют с торговлей или с бухгалтерией, в которой работает уже бухгалтер. Счета попадают из УНФ в управление торговлей, оплаты из торговли в УНФ. Управленческий учет и эффективность менеджеров - в УНФ, а расчеты и бухгалтерия со сдачей отчетности - в УТ (но в целом все можно делать вообще только в УНФ)

Поделиться сообщением


Ссылка на сообщение

У меня больше вопрос - к формированию заголовка авторизации.

 

Можно как-то его упростить-заменить ? С какой целью вообще авторизация сделана именно такой ?

Поделиться сообщением


Ссылка на сообщение

Добрый день.

js-код содержит ошибки, не получается из-за этого проверить в 1С.

Вы не могли бы актуализировать?

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...