amocrm-rails 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3bc05a6130ce9c1517987f919c9cea7899763b658113095523a8666bd6347a9
4
- data.tar.gz: f1233ee73dfc1d46bc6d29ebb86bd5626c2be6d5bf7119a617dacc78fc4e099c
3
+ metadata.gz: 62e5324a456fdc52f8455190fdc7c5d55e3cca449c837259366c732e3f11ffc0
4
+ data.tar.gz: 13cf6d39b9b5c6b824fa53b476aeae5d8e6b056c1b36fb6bdea12e0435624a4a
5
5
  SHA512:
6
- metadata.gz: bd796c99c3f4a4931693a6065c0127aab66335547b14c8632bd9c6e5ba7237b155e07f0c77fdd820d2039f500d4d319aa86e11b79027b33a4172355d677d663f
7
- data.tar.gz: 9b179d31d65a7c4ff53edfcbf4a610151698b39e0759caa9251c2a4671eb1f2925993996071cd0f805cd875c66eda3ee00f30c9f5d10f8aad8585d49754e1fa0
6
+ metadata.gz: e0bc864c80a9adee3e062b17978074dae509ec67a6d656cb7f5989945a7c6981a7b8b0f55e789b1a445567af8c76f4909af156270481b112fb61119ae77be52f
7
+ data.tar.gz: 7acd4c01f0d42cbc3168f26b2cf2c2589b1a26818c4d624891abde8cc889e65b45d3040d398c56edb3cec73498b026c96e0258136475f964f8488c4e6e442a54
data/README.markdown CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  ## Оглавление
4
4
  0. [Установка](#install)
5
+ 1. [Упрощенная авторизация](#easy_auth)
6
+ 2. [Авторизация через перенаправления пользователя (требуется gem Devise)](#devise_auth)
5
7
  1. [Параметры аккаунта](#account)
6
8
  2. [Сделки](#leads)
7
9
  1. [Список сделок](#leads_retrieve)
@@ -166,9 +168,57 @@
166
168
 
167
169
  и запустите `bundle install`.
168
170
 
169
- Затем: `rails g amocrm_rails:install`
171
+ Для упрощенной авторизации:
170
172
 
171
- В файл `config/amocrm.yml` вставьте ваши данные.
173
+ `rails g amocrm_rails:install`
174
+
175
+ Для авторизации через перенаправление пользователя (требуется [gem devise](https://github.com/heartcombo/devise)):
176
+
177
+ `rails g amocrm_rails:install --with=devise`
178
+
179
+ ### Получение CLIENT_ID, CLIENT_SECRET и CODE
180
+
181
+ #### <a name="easy_auth"></a> Упрощенная авторизация
182
+
183
+ 1. Переходим на страницу интеграций https://yourdomain.amocrm.ru/settings/widgets/ и нажимаем "+ СОЗДАТЬ ИНТЕГРАЦИЮ"
184
+ ![alt Страница виджетов](https://storage.deppa.ru/uploads/widgets.png)
185
+ 2. Заполняем поля, в первое поле вводим https://yourdomain.com/amocrm и нажимаем "Сохранить"
186
+ ![alt Создание интеграции](https://storage.deppa.ru/uploads/widget_add.png)
187
+ 3. Переходим на таб "Ключи и доступы". Код авторизации работает 20 минут.
188
+ ![alt Создание интеграции](https://storage.deppa.ru/uploads/widget_keys.png)
189
+
190
+ В файл `config/amocrm.yml` вставляем данные.
191
+
192
+ #### <a name="devise_auth"></a> Авторизация через перенаправления пользователя (требуется [gem Devise](https://github.com/heartcombo/devise))
193
+
194
+ Выполняем все шаги как при [упрощенной авторизации](#easy_auth)
195
+
196
+ Ссылка на получение кода:
197
+ ```rhtml
198
+ <%= link_to "Установить интеграцию",
199
+ amocrm_oauth_url(state: current_user.try(:id)),
200
+ class: 'btn btn-primary' %>
201
+ ```
202
+ Пример доступен по адресу:
203
+ `
204
+ https://yourdomain/amocrm/link
205
+ `
206
+
207
+ ![alt Страница с кнопкой](https://storage.deppa.ru/uploads/amo_link.png)
208
+
209
+ Нажимаем на кнопку, логинимся в амо и даём права приложению
210
+
211
+ ![alt Авторизация в amo](https://storage.deppa.ru/uploads/amo_form.png)
212
+
213
+ После вы будуте перенаправлены на страницу https://yourdomain.com/amocrm
214
+
215
+ ![alt Страница с кнопкой](https://storage.deppa.ru/uploads/amo_code.png)
216
+
217
+ Если вы увидили код - всё в порядке, копировать код нет необходимости, страницу можно закрыть.
218
+
219
+ Если вы не используете [gem Devise](https://github.com/heartcombo/devise), то вам необходимо реализовать в
220
+ application_controller.rb методы `current_user` для получения текущего пользователя, `user_signed_in?` для проверки
221
+ авторизован ли посетитель на вашем сайте и `new_user_session_path` для получения пути к странице авторизции.
172
222
 
173
223
  Вы можете изменять `timeout`, `open_timeout`, `faraday_adapter`, `proxy`, `symbolize_keys`, `logger`, и `debug`:
174
224
 
@@ -298,7 +348,7 @@ p(response.body)
298
348
  ```ruby
299
349
  body = [
300
350
  {
301
- source_name: "ОАО Коспромсервис",
351
+ source_name: "ООО Деппа",
302
352
  source_uid: "a1fee7c0fc436088e64ba2e8822ba2b3",
303
353
  created_at: 1510261200,
304
354
  _embedded: {
@@ -315,7 +365,7 @@ body = [
315
365
  ],
316
366
  companies: [
317
367
  {
318
- name: "ОАО Коспромсервис"
368
+ name: "ООО Деппа"
319
369
  }
320
370
  ]
321
371
  },
@@ -324,7 +374,7 @@ body = [
324
374
  uniq: "a1fe231cc88e64ba2e8822ba2b3ewrw",
325
375
  duration: 54,
326
376
  service_code: "CkAvbEwPam6sad",
327
- link: "https://example.com",
377
+ link: "https://deppa.ru",
328
378
  phone: 79998888888,
329
379
  called_at: 1510261200,
330
380
  from: "onlinePBX"
@@ -339,7 +389,7 @@ p(response.body)
339
389
  ```ruby
340
390
  body = [
341
391
  {
342
- source_name: "ОАО Коспромсервис",
392
+ source_name: "ООО Деппа",
343
393
  source_uid: "a1fee7c0fc436088e64ba2e8822ba2b3",
344
394
  created_at: 1590830520,
345
395
  _embedded: {
@@ -376,7 +426,7 @@ body = [
376
426
  ],
377
427
  companies: [
378
428
  {
379
- name: "ОАО Коспромсервис"
429
+ name: "ООО Деппа"
380
430
  }
381
431
  ]
382
432
  },
@@ -385,7 +435,7 @@ body = [
385
435
  form_id: "a1fee7c0fc436088e64ba2e8822ba2b3ewrw",
386
436
  form_sent_at: 1590830520,
387
437
  form_name: "Форма заявки для полёта в космос",
388
- form_page: "https://example.com",
438
+ form_page: "https://deppa.ru",
389
439
  referer: "https://www.google.com/search?&q=elon+musk"
390
440
  }
391
441
  }
@@ -561,7 +611,7 @@ contacts = response.body[:_embedded][:contacts]
561
611
  ```ruby
562
612
  params = {
563
613
  filter: {
564
- name: "ОАО Коспромсервис"
614
+ name: "ООО Деппа"
565
615
  }
566
616
  }
567
617
  response = AmocrmRails::Request.companies.retrieve(params: params)
@@ -1376,21 +1426,21 @@ tag_id = tags.first[:id]
1376
1426
  ### <a name="add_tags_to_entity"></a> [Добавление тегов к сущности](https://www.amocrm.ru/developers/content/crm_platform/tags-api#add-tags-to-entity)
1377
1427
  ```ruby
1378
1428
  body_item = {
1379
- "_embedded": {
1380
- "tags": [
1429
+ _embedded: {
1430
+ tags: [
1381
1431
  {
1382
- "id": tag_id
1432
+ id: tag_id
1383
1433
  }
1384
1434
  ]
1385
1435
  }
1386
1436
  }
1387
1437
  body = [
1388
1438
  {
1389
- "id": object_id,
1390
- "_embedded": {
1391
- "tags": [
1439
+ id: object_id,
1440
+ _embedded: {
1441
+ tags: [
1392
1442
  {
1393
- "id": tag_id
1443
+ id: tag_id
1394
1444
  }
1395
1445
  ]
1396
1446
  }
@@ -1417,15 +1467,15 @@ AmocrmRails::Request.contacts(customer_id).update(body: body_item)
1417
1467
 
1418
1468
  ```ruby
1419
1469
  body_item = {
1420
- "_embedded": {
1421
- "tags": nil
1470
+ _embedded: {
1471
+ tags: nil
1422
1472
  }
1423
1473
  }
1424
1474
  body = [
1425
1475
  {
1426
- "id": object_id,
1427
- "_embedded": {
1428
- "tags": nil
1476
+ id: object_id,
1477
+ _embedded: {
1478
+ tags: nil
1429
1479
  }
1430
1480
  }
1431
1481
  ]
@@ -1591,7 +1641,7 @@ body = [
1591
1641
  uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
1592
1642
  duration: 60,
1593
1643
  source: "onlinePBX",
1594
- link: "https://example.com",
1644
+ link: "https://deppa.ru",
1595
1645
  phone: "+79999999999"
1596
1646
  }
1597
1647
  },
@@ -1602,7 +1652,7 @@ body = [
1602
1652
  uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
1603
1653
  duration: 60,
1604
1654
  source: "onlinePBX",
1605
- link: "https://example.com",
1655
+ link: "https://deppa.ru",
1606
1656
  phone: "+79999999999"
1607
1657
  }
1608
1658
  },
@@ -1624,7 +1674,7 @@ body_item = {
1624
1674
  uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
1625
1675
  duration: 60,
1626
1676
  source: "onlinePBX",
1627
- link: "https://example.com",
1677
+ link: "https://deppa.ru",
1628
1678
  phone: "+79999999999"
1629
1679
  }
1630
1680
  }
@@ -1662,7 +1712,7 @@ body = [
1662
1712
  uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
1663
1713
  duration: 60,
1664
1714
  source: "onlinePBX",
1665
- link: "https://example.com",
1715
+ link: "https://deppa.ru",
1666
1716
  phone: "+79999999999"
1667
1717
  }
1668
1718
  },
@@ -1673,7 +1723,7 @@ body = [
1673
1723
  uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
1674
1724
  duration: 60,
1675
1725
  source: "onlinePBX",
1676
- link: "https://example.com",
1726
+ link: "https://deppa.ru",
1677
1727
  phone: "+79999999999"
1678
1728
  }
1679
1729
  },
@@ -1695,7 +1745,7 @@ body_item = {
1695
1745
  uniq: "8f52d38a-5fb3-406d-93a3-a4832dc28f8b",
1696
1746
  duration: 60,
1697
1747
  source: "onlinePBX",
1698
- link: "https://example.com",
1748
+ link: "https://deppa.ru",
1699
1749
  phone: "+79999999999"
1700
1750
  }
1701
1751
  }
@@ -1858,7 +1908,6 @@ response = AmocrmRails::Request.customers.transactions(transaction_id).delete
1858
1908
  p(response.body)
1859
1909
  ```
1860
1910
  ### <a name="customer_bonus_points_update"></a> [Списание/начисление бонусных баллов покупателю](https://www.amocrm.ru/developers/content/crm_platform/customers-api#customer–bonus-points-update)
1861
-
1862
1911
  ```ruby
1863
1912
  body = {
1864
1913
  earn: 500
@@ -1876,48 +1925,362 @@ status_id = statuses.first[:id]
1876
1925
  ### <a name="customers_statuses_detail"></a> [Получение статуса покупателей по ID](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customer-status-detail)
1877
1926
  ```ruby
1878
1927
  response = AmocrmRails::Request.customers.statuses(status_id).retrieve
1928
+ status = response.body
1929
+ ```
1930
+ ### <a name="customers_statuses_add"></a> [Добавление статусов в воронку](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customers-statuses-add)
1931
+ ```ruby
1932
+ body = [
1933
+ {
1934
+ name: "Новый статус",
1935
+ sort: 100,
1936
+ color: "#fffeb2"
1937
+ },
1938
+ {
1939
+ name: "Новый статус 2",
1940
+ sort: 200,
1941
+ color: "#fffeb2"
1942
+ }
1943
+ ]
1944
+ response = AmocrmRails::Request.customers.statuses.create(body: body)
1945
+ p(response.body)
1879
1946
  statuses = response.body[:_embedded][:statuses]
1880
1947
  status_id = statuses.first[:id]
1881
1948
  ```
1882
- ### <a name="customers_statuses_add"></a> [Добавление статусов в воронку](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customers-statuses-add)
1883
1949
  ### <a name="customers_statuses_edit"></a> [Редактирование статуса покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customers-status-edit)
1950
+ ```ruby
1951
+ body = {
1952
+ name: "Новое название для статуса",
1953
+ color: "#c1e0ff"
1954
+ }
1955
+ response = AmocrmRails::Request.customers.statuses(status_id).update(body: body)
1956
+ customer = response.body
1957
+ ```
1884
1958
  ### <a name="customer_status_delete"></a> [Удаление статуса покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customer-status-delete)
1959
+ ```ruby
1960
+ AmocrmRails::Request.customers.statuses(status_id).delete
1961
+ ```
1885
1962
  ### <a name="segments_list"></a> [Список сегментов покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segments-list)
1963
+ ```ruby
1964
+ response = AmocrmRails::Request.customers.segments
1965
+ segments = response.body[:_embedded][:segments]
1966
+ segment_id = segments.first[:id]
1967
+ ```
1886
1968
  ### <a name="segments_detail"></a> [Получение сегмента покупателей по ID](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segment-detail)
1969
+ ```ruby
1970
+ response = AmocrmRails::Request.customers.segments(segment_id).retrieve
1971
+ segment = response.body
1972
+ ```
1887
1973
  ### <a name="segments_add"></a> [Добавление сегмента покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segment-add)
1974
+ ```ruby
1975
+ body = {
1976
+ name: "Сегмент для примера",
1977
+ color: "ae003f"
1978
+ }
1979
+ response = AmocrmRails::Request.customers.segments.create(body: body)
1980
+ p(response.body)
1981
+ segment = response.body
1982
+ segment_id = segment[:id]
1983
+ ```
1888
1984
  ### <a name="segments_edit"></a> [Редактирование сегмента покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segment-edit)
1985
+ ```ruby
1986
+ body = {
1987
+ name: "Новое имя для сегмента",
1988
+ color: "ae003f"
1989
+ }
1990
+ response = AmocrmRails::Request.customers.segments(segment_id).update(body: body)
1991
+ segment = response.body
1992
+ ```
1889
1993
  ### <a name="segment_delete"></a> [Удаление сегмента покупателей](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segment-delete)
1994
+ ```ruby
1995
+ AmocrmRails::Request.customers.segments(segment_id).delete
1996
+ ```
1890
1997
  ### <a name="customers_statuses_colors"></a> [Доступные цвета статусов](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#customers-statuses-colors)
1891
1998
  ### <a name="customers_statuses_colors"></a> [Доступные цвета сегментов](https://www.amocrm.ru/developers/content/crm_platform/customers-statuses-api#segments-colors)
1892
1999
 
1893
2000
  ## <a name="users"></a> [Пользователи](https://www.amocrm.ru/developers/content/crm_platform/users-api)
1894
2001
  ### <a name="users_list"></a> [Список пользователей](https://www.amocrm.ru/developers/content/crm_platform/users-api#users-list)
2002
+ ```ruby
2003
+ params = {
2004
+ with: 'group',
2005
+ page: 0,
2006
+ limit: 10
2007
+ }
2008
+ response = AmocrmRails::Request.users.retrieve
2009
+ users = response.body[:_embedded][:users]
2010
+ user_id = users.first[:id]
2011
+ ```
1895
2012
  ### <a name="users_detail"></a> [Получение пользователя по ID](https://www.amocrm.ru/developers/content/crm_platform/users-api#user-detail)
2013
+ ```ruby
2014
+ params = {
2015
+ with: 'group'
2016
+ }
2017
+ response = AmocrmRails::Request.users(user_id).retrieve(params: params)
2018
+ user = response.body
2019
+ user_id = user[:id]
2020
+ ```
1896
2021
  ### <a name="users_add"></a> [Добавление пользователей](https://www.amocrm.ru/developers/content/crm_platform/users-api#users-add)
2022
+ ```ruby
2023
+ body = [
2024
+ {
2025
+ name: "Павел Осетров",
2026
+ email: 'pavel.osetrov@me.com'
2027
+ }
2028
+ ]
2029
+ response = AmocrmRails::Request.users.create(body: body)
2030
+ p(response.body)
2031
+ users = response.body[:_embedded][:users]
2032
+ user_id = users.first[:id]
2033
+ ```
1897
2034
  ### <a name="roles_list"></a> [Список ролей пользователей](https://www.amocrm.ru/developers/content/crm_platform/users-api#roles-list)
2035
+ ```ruby
2036
+ params = {
2037
+ with: 'users',
2038
+ page: 0,
2039
+ limit: 10
2040
+ }
2041
+ response = AmocrmRails::Request.roles.retrieve
2042
+ roles = response.body[:_embedded][:roles]
2043
+ role_id = roles.first[:id]
2044
+ ```
1898
2045
  ### <a name="roles_detail"></a> [Получение роли по ID](https://www.amocrm.ru/developers/content/crm_platform/users-api#role-detail)
2046
+ ```ruby
2047
+ params = {
2048
+ with: 'users'
2049
+ }
2050
+ response = AmocrmRails::Request.roles(role_id).retrieve(params: params)
2051
+ role = response.body
2052
+ role_id = user[:id]
2053
+ ```
1899
2054
  ### <a name="roles_add"></a> [Добавление ролей](https://www.amocrm.ru/developers/content/crm_platform/users-api#roles-add)
2055
+ ```ruby
2056
+ body = [
2057
+ {
2058
+ name: "role 3",
2059
+ rights: {
2060
+ leads: {
2061
+ add: "A",
2062
+ edit: "G",
2063
+ view: "G",
2064
+ delete: "G",
2065
+ export: "G"
2066
+ },
2067
+ tasks: {
2068
+ edit: "A",
2069
+ delete: "A"
2070
+ },
2071
+ contacts: {
2072
+ add: "A",
2073
+ edit: "A",
2074
+ view: "A",
2075
+ delete: "A",
2076
+ export: "A"
2077
+ },
2078
+ companies: {
2079
+ add: "A",
2080
+ edit: "A",
2081
+ view: "A",
2082
+ delete: "A",
2083
+ export: "A"
2084
+ },
2085
+ mail_access: true,
2086
+ status_rights: [
2087
+ {
2088
+ entity_type: "leads",
2089
+ pipeline_id: 16056,
2090
+ status_id: 20542166,
2091
+ rights: {
2092
+ edit: "A",
2093
+ view: "A",
2094
+ delete: "A",
2095
+ export: "A"
2096
+ }
2097
+ }
2098
+ ],
2099
+ catalog_access: true
2100
+ }
2101
+ }
2102
+ ]
2103
+ response = AmocrmRails::Request.roles.create(body: body)
2104
+ p(response.body)
2105
+ roles = response.body[:_embedded][:roles]
2106
+ role_id = roles.first[:id]
2107
+ ```
1900
2108
  ### <a name="roles_edit"></a> [Редактирование роли](https://www.amocrm.ru/developers/content/crm_platform/users-api#role-edit)
2109
+ ```ruby
2110
+ body = {
2111
+ name: "role 3 modified",
2112
+ rights: {
2113
+ contacts: {
2114
+ add: "A",
2115
+ edit: "D",
2116
+ view: "D",
2117
+ delete: "D",
2118
+ export: "D"
2119
+ },
2120
+ status_rights: nil
2121
+ }
2122
+ }
2123
+ response = AmocrmRails::Request.roles(role_id).update(body: body)
2124
+ role = response.body
2125
+ ```
2126
+
1901
2127
  ### <a name="roles_delete"></a> [Удаление роли](https://www.amocrm.ru/developers/content/crm_platform/users-api#role-delete)
2128
+ ```ruby
2129
+ AmocrmRails::Request.roles(role_id).delete
2130
+ ```
1902
2131
  ### <a name="users_common_rights"></a> [Общие обозначения прав пользователей](https://www.amocrm.ru/developers/content/crm_platform/users-api#common-rights)
1903
2132
  ### <a name="users_rights_dependence"></a> [Зависимости прав пользователей](https://www.amocrm.ru/developers/content/crm_platform/users-api#rights-dependence)
1904
2133
 
1905
2134
  ## <a name="products"></a> [Товары](https://www.amocrm.ru/developers/content/crm_platform/products-api)
1906
2135
  ## <a name="webhooks"></a> [Вебхуки](https://www.amocrm.ru/developers/content/crm_platform/webhooks-api)
1907
2136
  ### <a name="webhooks_list"></a> [Список установленных вебхуков в аккаунте](https://www.amocrm.ru/developers/content/crm_platform/webhooks-api#webhooks-list)
2137
+ ```ruby
2138
+ response = AmocrmRails::Request.webhooks.retrieve
2139
+ webhooks = response.body[:_embedded][:webhooks]
2140
+ webhook_id = webhooks.first[:id]
2141
+ ```
1908
2142
  ### <a name="webhooks_subscribe"></a> [Подписка на вебхук](https://www.amocrm.ru/developers/content/crm_platform/webhooks-api#webhook-subscribe)
2143
+ ```ruby
2144
+ body = {
2145
+ destination: "https://deppa.ru",
2146
+ settings: [
2147
+ "add_lead"
2148
+ ],
2149
+ sort: 10
2150
+ }
2151
+ response = AmocrmRails::Request.webhooks.create(body: body)
2152
+ p(response.body)
2153
+ webhook = response.body
2154
+ webhook_id = webhook[:id]
2155
+ ```
1909
2156
  ### <a name="webhooks_delete"></a> [Отписка от событий](https://www.amocrm.ru/developers/content/crm_platform/webhooks-api#webhooks-delete)
2157
+ ```ruby
2158
+ AmocrmRails::Request.webhooks(webhook_id).delete
2159
+ ```
1910
2160
  ### <a name="webhooks_available_actions"></a> [Возможные событий](https://www.amocrm.ru/developers/content/crm_platform/webhooks-api#webhooks-available-actions)
1911
2161
 
1912
2162
  ## <a name="widgets"></a> [Виджеты](https://www.amocrm.ru/developers/content/crm_platform/widgets-api)
1913
2163
  ### <a name="widgets_list"></a> [Список виджетов](https://www.amocrm.ru/developers/content/crm_platform/widgets-api#widgets-list)
2164
+ ```ruby
2165
+ params = {
2166
+ page: 0,
2167
+ limit: 10
2168
+ }
2169
+ response = AmocrmRails::Request.widgets.retrieve
2170
+ widgets = response.body[:_embedded][:widgets]
2171
+ widget_code = widgets.first[:code]
2172
+ ```
1914
2173
  ### <a name="widgets_detail"></a> [Информация о виджете по его коду](https://www.amocrm.ru/developers/content/crm_platform/widgets-api#widget-detail)
2174
+ ```ruby
2175
+ response = AmocrmRails::Request.widgets(widget_code).retrieve
2176
+ widget = response.body
2177
+ ```
1915
2178
  ### <a name="widgets_install"></a> [Установка виджета в аккаунт](https://www.amocrm.ru/developers/content/crm_platform/widgets-api#widget-install)
2179
+ ```ruby
2180
+ body = {
2181
+ login: "example",
2182
+ password: "eXaMp1E",
2183
+ script_path: "https://deppa.ru/"
2184
+ }
2185
+ response = AmocrmRails::Request.widgets.create(body: body)
2186
+ p(response.body)
2187
+ widget = response.body
2188
+ ```
1916
2189
  ### <a name="widgets_uninstall"></a> [Удаление установки виджета](https://www.amocrm.ru/developers/content/crm_platform/widgets-api#widget-uninstall)
2190
+ ```ruby
2191
+ AmocrmRails::Request.widgets(widget_code).delete
2192
+ ```
1917
2193
  ### <a name="widgets_continue"></a> [Подтверждение выполнения блока виджета в Salesbot](https://www.amocrm.ru/developers/content/crm_platform/widgets-api#widget-continue)
1918
-
2194
+ ```ruby
2195
+ body = {
2196
+ data: {
2197
+ status: "success"
2198
+ },
2199
+ execute_handlers: [
2200
+ {
2201
+ handler: "show",
2202
+ params: {
2203
+ type: "text",
2204
+ value: "Здесь текст"
2205
+ }
2206
+ },
2207
+ {
2208
+ handler: "show",
2209
+ params: {
2210
+ type: "buttons",
2211
+ value: "Нажми на кнопку",
2212
+ buttons: [
2213
+ "1ая кнопка",
2214
+ "2ая кнопка",
2215
+ "3ая кнопка",
2216
+ "4ая кнопка"
2217
+ ]
2218
+ }
2219
+ },
2220
+ {
2221
+ handler: "show",
2222
+ params: {
2223
+ type: "buttons_url",
2224
+ value: "Кнопки со ссылками",
2225
+ buttons: [
2226
+ "https://amocrm.ru",
2227
+ "https://deppa.ru"
2228
+ ]
2229
+ }
2230
+ },
2231
+ {
2232
+ handler: "goto",
2233
+ params: {
2234
+ type: "question|answer|finish",
2235
+ step: 5
2236
+ }
2237
+ }
2238
+ ]
2239
+ }
2240
+ AmocrmRails::Request.salesbot(bot_id).continue(continue_id).create(body: body)
2241
+ AmocrmRails::Request.marketingbot(bot_id).continue(continue_id).create(body: body)
2242
+ ```
1919
2243
  ## <a name="calls"></a> [Добавление звонков](https://www.amocrm.ru/developers/content/crm_platform/calls-api)
1920
-
2244
+ ```ruby
2245
+ body = [
2246
+ {
2247
+ duration: 10,
2248
+ source: "example_integration",
2249
+ phone: "123123",
2250
+ link: "https://deppa.ru/audio.mp3",
2251
+ direction: "inbound",
2252
+ call_result: "Успешный разговор",
2253
+ call_status: 4
2254
+ }
2255
+ ]
2256
+ response = AmocrmRails::Request.calls.create(body: body)
2257
+ p(response.body)
2258
+ calls = response.body[:_embedded][:calls]
2259
+ ```
1921
2260
  ## <a name="salesbot"></a> [Salebot](https://www.amocrm.ru/developers/content/api/salesbot-api)
1922
-
2261
+ ```ruby
2262
+ body = [
2263
+ {
2264
+ bot_id: 565,
2265
+ entity_id: 76687686,
2266
+ entity_type: 1
2267
+ }
2268
+ ]
2269
+ response = AmocrmRails::Request.salesbot.run.create(body: body)
2270
+ p(response.body)
2271
+ ```
1923
2272
  ## <a name="short_links"></a> [Короткие ссылки](https://www.amocrm.ru/developers/content/crm_platform/short_links)
2273
+ ```ruby
2274
+ body = [
2275
+ {
2276
+ url:"https://deppa.ru",
2277
+ metadata:{
2278
+ entity_type:"contacts",
2279
+ entity_id:11070881
2280
+ }
2281
+ }
2282
+ ]
2283
+ response = AmocrmRails::Request.short_links.create(body: body)
2284
+ p(response.body)
2285
+ short_links = response.body[:_embedded][:short_links]
2286
+ ```
data/lib/amocrm-rails.rb CHANGED
@@ -2,11 +2,17 @@ require 'amocrm-rails/amocrm_error'
2
2
  require 'amocrm-rails/request'
3
3
  require 'amocrm-rails/api_request'
4
4
  require 'amocrm-rails/response'
5
+ require 'concern'
6
+ require 'helper'
5
7
 
6
8
  module AmocrmRails
7
9
  class << self
8
- def generate_access_token(client_id=AmocrmRails.client_id, client_secret=AmocrmRails.client_secret, refresh_token=nil, count=0)
9
- refresh_token ||= AmocrmRails.try(:refresh_token)
10
+ def generate_access_token(**options)
11
+ user_id = AmocrmRails.try(:user_id)
12
+ client_id = options[:client_id] || AmocrmRails.client_id
13
+ client_secret = options[:client_secret] || AmocrmRails.client_secret
14
+ refresh_token = options[:refresh_token] || AmocrmRails.try(:refresh_token)
15
+ count = options[:count].to_i
10
16
  params = {
11
17
  client_id: client_id,
12
18
  client_secret: client_secret,
@@ -30,12 +36,20 @@ module AmocrmRails
30
36
  response_token = JSON.parse(response.body)
31
37
  data = YAML.load_file("config/amocrm_token.yml")
32
38
  response_token.each do |k, v|
33
- data[k] = v
34
- AmocrmRails::register k.underscore.to_sym, v
39
+ if user_id.present?
40
+ data[user_id] = {} if data[user_id].nil?
41
+ data[user_id][k] = v
42
+ else
43
+ data[k] = v
44
+ end
45
+ AmocrmRails::register(k.underscore.to_sym, v)
35
46
  end
36
47
  File.open("config/amocrm_token.yml", 'w') { |f| YAML.dump(data, f) }
37
48
  elsif count < 3 && AmocrmRails.refresh_token.present?
38
- AmocrmRails.generate_access_token(client_id, client_secret, AmocrmRails.refresh_token, count+1)
49
+ AmocrmRails.generate_access_token(client_id: client_id,
50
+ client_secret: client_secret,
51
+ refresh_token:AmocrmRails.refresh_token,
52
+ count: count+1)
39
53
  end
40
54
  end
41
55
 
@@ -14,10 +14,10 @@ module AmocrmRails
14
14
  end
15
15
  parse_response(response)
16
16
  rescue => e
17
- if e.response.try(:code) == 401 && first_time
17
+ if [401, 402].include?(e.response.dig(:status)) && first_time
18
18
  AmocrmRails.generate_access_token
19
19
  self.post(params: params, headers: headers, body: body, first_time: false)
20
- elsif e.response.try(:code) == 429
20
+ elsif e.response.dig(:status) == 429
21
21
  sleep(1.second)
22
22
  self.post(params: params, headers: headers, body: body, first_time: false)
23
23
  else
@@ -35,10 +35,10 @@ module AmocrmRails
35
35
  end
36
36
  parse_response(response)
37
37
  rescue => e
38
- if e.response.try(:code) == 401 && first_time
38
+ if [401, 402].include?(e.response.dig(:status)) && first_time
39
39
  AmocrmRails.generate_access_token
40
40
  self.patch(params: params, headers: headers, body: body, first_time: false)
41
- elsif e.response.try(:code) == 429
41
+ elsif e.response.try(:status) == 429
42
42
  sleep(1.second)
43
43
  self.patch(params: params, headers: headers, body: body, first_time: false)
44
44
  else
@@ -56,10 +56,10 @@ module AmocrmRails
56
56
  end
57
57
  parse_response(response)
58
58
  rescue => e
59
- if e.response.try(:code) == 401 && first_time
59
+ if [401, 402].include?(e.response.dig(:status)) && first_time
60
60
  AmocrmRails.generate_access_token
61
61
  self.put(params: params, headers: headers, body: body, first_time: false)
62
- elsif e.response.try(:code) == 429
62
+ elsif e.response.dig(:status) == 429
63
63
  sleep(1.second)
64
64
  self.put(params: params, headers: headers, body: body, first_time: false)
65
65
  else
@@ -77,10 +77,10 @@ module AmocrmRails
77
77
  end
78
78
  parse_response(response)
79
79
  rescue => e
80
- if e.response.try(:code) == 401 && first_time
80
+ if [401, 402].include?(e.response.dig(:status)) && first_time
81
81
  AmocrmRails.generate_access_token
82
82
  self.get(params: params, headers: headers, first_time: false)
83
- elsif e.response.try(:code) == 429
83
+ elsif e.response.try(:status) == 429
84
84
  sleep(1.second)
85
85
  self.get(params: params, headers: headers, body: body, first_time: false)
86
86
  else
@@ -98,10 +98,10 @@ module AmocrmRails
98
98
  end
99
99
  parse_response(response)
100
100
  rescue => e
101
- if e.response.try(:code) == 401 && first_time
101
+ if [401, 402].include?(e.response.dig(:status)) && first_time
102
102
  AmocrmRails.generate_access_token
103
103
  self.delete(params: params, headers: headers, first_time: false)
104
- elsif e.response.try(:code) == 429
104
+ elsif e.response.try(:stattus) == 429
105
105
  sleep(1.second)
106
106
  self.delete(params: params, headers: headers, body: body, first_time: false)
107
107
  else
data/lib/concern.rb ADDED
@@ -0,0 +1,30 @@
1
+ module AmocrmRails
2
+ module Concern
3
+ extend ActiveSupport::Concern
4
+
5
+ private
6
+
7
+ def update_auth_code
8
+ if user_signed_in?
9
+ AmocrmRails::register :user_id, current_user.id
10
+ if File.exist?('config/amocrm.yml')
11
+ data = YAML.load_file('config/amocrm.yml')
12
+ return nil if data.dig(Rails.env, current_user.id).nil?
13
+ data[Rails.env][current_user.id].each do |k, v|
14
+ AmocrmRails::register k.underscore.to_sym, v
15
+ end
16
+
17
+ if File.exist?('config/amocrm_token.yml')
18
+ token_data = YAML.load_file("config/amocrm_token.yml")
19
+ token_data[current_user.id] = {} if data.dig(current_user.id).nil?
20
+ token_data[current_user.id].each do |k, v|
21
+ config::register k.underscore.to_sym, v
22
+ end
23
+ end
24
+
25
+ AmocrmRails.generate_access_token if AmocrmRails.access_token.nil? && AmocrmRails.code.present?
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -4,10 +4,31 @@ module AmocrmRails
4
4
  class InstallGenerator < Rails::Generators::Base
5
5
  source_root File.expand_path('templates', __dir__)
6
6
 
7
+ class_option :with, type: :string, default: ''
8
+
7
9
  def generate_install
8
- copy_file 'amocrm.yml', 'config/amocrm.yml'
10
+ with = options['with']
9
11
  copy_file 'amocrm_token.yml', 'config/amocrm_token.yml'
10
- copy_file 'amocrm.rb', 'config/initializers/amocrm.rb'
12
+
13
+ if with.to_s.downcase == 'devise'
14
+ copy_file 'devise/app/controllers/amocrm_controller.rb', 'app/controllers/amocrm_controller.rb'
15
+ copy_file 'devise/app/views/amocrm/code.html.erb', 'app/views/amocrm/code.html.erb'
16
+ copy_file 'devise/app/views/amocrm/link.html.erb', 'app/views/amocrm/link.html.erb'
17
+ copy_file 'devise/config/amocrm.yml', 'config/amocrm.yml'
18
+ copy_file 'devise/config/initializers/amocrm.rb', 'config/initializers/amocrm.rb'
19
+ route "get '/amocrm' => 'amocrm#code'"
20
+ route "get '/amocrm/link' => 'amocrm#link'"
21
+ route "post '/amocrm/webhook/:name' => 'amocrm#webhook'"
22
+
23
+ inject_into_file 'app/controllers/application_controller.rb', after: "class ApplicationController < ActionController::Base\n" do <<-'RUBY'
24
+ include AmocrmRails::Concern
25
+ before_action :update_auth_code
26
+ RUBY
27
+ end
28
+ else
29
+ copy_file 'amocrm.rb', 'config/initializers/amocrm.rb'
30
+ copy_file 'amocrm.yml', 'config/amocrm.yml'
31
+ end
11
32
  end
12
33
  end
13
34
  end
@@ -2,14 +2,11 @@ defaults: &defaults
2
2
  CLIENT_ID: '***'
3
3
  CLIENT_SECRET: '***'
4
4
  CODE: '***'
5
- redirect_uri: https://yourdomain.ru
5
+ redirect_uri: https://yourdomain.ru/amocrm
6
6
  api_endpoint: https://yourdomain.amocrm.ru
7
- URL_TOKEN: 'https://yourdomain.amocrm.ru/oauth2/access_token'
8
- REDIRECT_URI: 'https://yourdomain.com'
7
+ URL_TOKEN: https://yourdomain.amocrm.ru/oauth2/access_token
9
8
  production:
10
9
  <<: *defaults
11
- URL_TOKEN: 'https://yourdomain.amocrm.ru/oauth2/access_token'
12
- REDIRECT_URI: 'https://yourdomain.ru'
13
10
  development:
14
11
  <<: *defaults
15
12
  test:
@@ -0,0 +1,33 @@
1
+ class AmocrmController < ApplicationController
2
+ before_action :authenticate_user!, except: [:webhook]
3
+
4
+ def link
5
+ end
6
+
7
+ def code
8
+ if current_user.id == params[:state].to_i
9
+ if File.exist?('config/amocrm.yml')
10
+ data = YAML.load_file('config/amocrm.yml')
11
+ data[Rails.env][current_user.id] = {} if data[Rails.env][current_user.id].nil?
12
+ params.each do |k, v|
13
+ data[Rails.env][current_user.id][k] = v
14
+ AmocrmRails::register k.underscore.to_sym, v
15
+ end
16
+ File.open("config/amocrm.yml", 'w') { |f| YAML.dump(data, f) }
17
+ end
18
+ end
19
+ @code = params[:code]
20
+ end
21
+
22
+ def webhook
23
+ webhook_name = params[:name]
24
+ end
25
+
26
+ private
27
+
28
+ def authenticate_user!
29
+ unless user_signed_in?
30
+ redirect_to new_user_session_path
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,6 @@
1
+ <div style="width: 100%; padding: 100px; text-align: center;">
2
+ Your code:
3
+ <code>
4
+ <%= @code %>
5
+ </code>
6
+ </div>
@@ -0,0 +1,6 @@
1
+ <div style="width: 100%; padding: 100px; text-align: center;">
2
+
3
+ <%= link_to "Установить интеграцию",
4
+ amocrm_oauth_url(state: current_user.try(:id)),
5
+ class: 'btn btn-primary' %>
6
+ </div>
@@ -0,0 +1,16 @@
1
+ require 'amocrm'
2
+
3
+ AmocrmRails.setup do |config|
4
+ if File.exist?('config/amocrm.yml')
5
+ processed = YAML.load_file('config/amocrm.yml')[Rails.env]
6
+
7
+ processed.each do |k, v|
8
+ config::register k.underscore.to_sym, v
9
+ end
10
+
11
+ config::Request.timeout = 60
12
+ config::Request.open_timeout = 60
13
+ config::Request.symbolize_keys = true
14
+ config::Request.debug = false
15
+ end
16
+ end
@@ -0,0 +1,8 @@
1
+ require 'amocrm-rails'
2
+
3
+ AmocrmRails.setup do |config|
4
+ config::Request.timeout = 60
5
+ config::Request.open_timeout = 60
6
+ config::Request.symbolize_keys = true
7
+ config::Request.debug = false
8
+ end
data/lib/helper.rb ADDED
@@ -0,0 +1,5 @@
1
+ module AmocrmHelper
2
+ def amocrm_oauth_url(state: nil, mode: 'post_message', client_id: AmocrmRails::client_id)
3
+ "https://www.amocrm.ru/oauth?client_id=#{client_id}&mode=#{mode}&state=#{state}"
4
+ end
5
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amocrm-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Osetrov
@@ -52,11 +52,18 @@ files:
52
52
  - lib/amocrm-rails/request.rb
53
53
  - lib/amocrm-rails/response.rb
54
54
  - lib/amocrm-rails/version.rb
55
+ - lib/concern.rb
55
56
  - lib/generators/amocrm_rails/install/USAGE
56
57
  - lib/generators/amocrm_rails/install/install_generator.rb
57
58
  - lib/generators/amocrm_rails/install/templates/amocrm.rb
58
59
  - lib/generators/amocrm_rails/install/templates/amocrm.yml
59
60
  - lib/generators/amocrm_rails/install/templates/amocrm_token.yml
61
+ - lib/generators/amocrm_rails/install/templates/devise/app/controllers/amocrm_controller.rb
62
+ - lib/generators/amocrm_rails/install/templates/devise/app/views/amocrm/code.html.erb
63
+ - lib/generators/amocrm_rails/install/templates/devise/app/views/amocrm/link.html.erb
64
+ - lib/generators/amocrm_rails/install/templates/devise/config/amocrm.rb
65
+ - lib/generators/amocrm_rails/install/templates/devise/config/initializers/amocrm.rb
66
+ - lib/helper.rb
60
67
  homepage: https://github.com/osetrov/amocrm
61
68
  licenses:
62
69
  - MIT