Cannot create Ticket with attachment via REST API

Infos:

  • Used Zammad version: 3.4
  • Used Zammad installation source: package
  • Operating system: ubuntu 18.04
  • Browser + version: Google Chrome Version 83.0.4103.116

Expected behavior:

  • When I create a ticket with attachments using the rest API, Ticket should get created with a article containing the attachments.

Actual behavior:

  • Ticket gets created, but the article and the attachments do not get created.

Steps to reproduce the behavior:

  • Execute the following code in nodejs
    fs.readFile("sample.jpg", function(err, data){

      if(err){
    
          console.log("Read error", err);
    
          return;
    
      } else {
    
          console.log("We got file");
    
          const tickdata = {
    
              title: "Help me!",
    
              group: "Incoming",
    
              customer: "XXXXXX@YYYYY.com",
    
              article: {
    
                subject: "Testing api",
    
                body: "lets see if it can work",
    
                attachments: [
    
                  {
    
                    "filename": "sample.jpg",
    
                    "data": data.toString('base64'),
    
                    "mime-type": "text/plain"
    
                  },
    
                ],
                note: "API Ticket",
              }
          };
          request({...apiHeader, form : tickdata}, function (error, response) {
    
              if (error) throw new Error(error);
    
              console.log("Ticket inserted", response.body);
    
              
    
          });
    
      } 
    

    })

API Response

    Ticket inserted <!DOCTYPE html>
<html class="dark">
<meta charset="utf-8">
<title>500: Something went wrong</title>
<link rel="stylesheet" href="/assets/error/style.css">
<body >
<h1>500: We're sorry, but something went wrong.</h1>
  <div class="error-image" style="background-image: url(/assets/error/error-2.svg)"></div>
  <p>We're sorry, but something went wrong.</p>
</body>
</html>

Zammad production Log Shows this -

[2020-07-12T07:39:44.943721 #4834-47171128951380] ERROR -- : undefined method `each_with_index' for #<ActionController::Parameters:0x000055cdc47d5928> (NoMethodError)

/opt/zammad/app/controllers/concerns/creates_ticket_articles.rb:79:in `article_create'

/opt/zammad/app/controllers/tickets_controller.rb:167:in `block in create'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/locking/pessimistic.rb:84:in `block in with_lock'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_adapters/abstract/database_statements.rb:267:in `block in transaction'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_adapters/abstract/transaction.rb:239:in `block in within_new_transaction'

/opt/zammad/vendor/ruby-2.6.5/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_adapters/abstract/transaction.rb:236:in `within_new_transaction'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/connection_adapters/abstract/database_statements.rb:267:in `transaction'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/transactions.rb:212:in `transaction'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/transactions.rb:301:in `transaction'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/locking/pessimistic.rb:82:in `with_lock'

/opt/zammad/app/controllers/tickets_controller.rb:155:in `create'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/abstract_controller/base.rb:194:in `process_action'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_controller/metal/rendering.rb:30:in `process_action'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/abstract_controller/callbacks.rb:42:in `block in process_action'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/callbacks.rb:109:in `block in run_callbacks'

/opt/zammad/app/controllers/application_controller/has_secure_content_security_policy_for_downloads.rb:18:in `block (4 levels) in <module:HasSecureContentSecurityPolicyForDownloads>'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/notifications.rb:180:in `subscribed'

/opt/zammad/app/controllers/application_controller/has_secure_content_security_policy_for_downloads.rb:17:in `block (3 levels) in <module:HasSecureContentSecurityPolicyForDownloads>'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/notifications.rb:180:in `subscribed'

/opt/zammad/app/controllers/application_controller/has_secure_content_security_policy_for_downloads.rb:16:in `block (2 levels) in <module:HasSecureContentSecurityPolicyForDownloads>'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/callbacks.rb:118:in `instance_exec'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/callbacks.rb:118:in `block in run_callbacks'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/callbacks.rb:136:in `run_callbacks'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/abstract_controller/callbacks.rb:41:in `process_action'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_controller/metal/rescue.rb:22:in `process_action'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/notifications.rb:168:in `block in instrument'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/notifications/instrumenter.rb:23:in `instrument'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/notifications.rb:168:in `instrument'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_controller/metal/instrumentation.rb:32:in `process_action'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_controller/metal/params_wrapper.rb:256:in `process_action'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.3/lib/active_record/railties/controller_runtime.rb:24:in `process_action'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/abstract_controller/base.rb:134:in `process'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionview-5.2.4.3/lib/action_view/rendering.rb:32:in `process'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_controller/metal.rb:191:in `dispatch'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_controller/metal.rb:252:in `dispatch'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/routing/route_set.rb:52:in `dispatch'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/routing/route_set.rb:34:in `serve'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/journey/router.rb:52:in `block in serve'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/journey/router.rb:35:in `each'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/journey/router.rb:35:in `serve'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/routing/route_set.rb:840:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:420:in `call_app!'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-saml-1.10.1/lib/omniauth/strategies/saml.rb:89:in `other_phase'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:190:in `call!'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:169:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:192:in `call!'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:169:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:192:in `call!'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:169:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:192:in `call!'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:169:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:192:in `call!'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:169:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:192:in `call!'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:169:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:192:in `call!'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:169:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:192:in `call!'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:169:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:192:in `call!'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:169:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:192:in `call!'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/strategy.rb:169:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/omniauth-1.9.0/lib/omniauth/builder.rb:64:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/tempfile_reaper.rb:15:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/etag.rb:27:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/conditional_get.rb:40:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/head.rb:12:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/http/content_security_policy.rb:18:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/session/abstract/id.rb:266:in `context'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/session/abstract/id.rb:260:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/middleware/cookies.rb:670:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/callbacks.rb:98:in `run_callbacks'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/middleware/callbacks.rb:26:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/railties-5.2.4.3/lib/rails/rack/logger.rb:38:in `call_app'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/railties-5.2.4.3/lib/rails/rack/logger.rb:26:in `block in call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/tagged_logging.rb:71:in `block in tagged'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/tagged_logging.rb:28:in `tagged'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/tagged_logging.rb:71:in `tagged'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/railties-5.2.4.3/lib/rails/rack/logger.rb:26:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/middleware/request_id.rb:27:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/method_override.rb:24:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/runtime.rb:22:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/middleware/executor.rb:14:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.4.3/lib/action_dispatch/middleware/static.rb:127:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/rack-2.2.3/lib/rack/sendfile.rb:110:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/railties-5.2.4.3/lib/rails/engine.rb:524:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/puma-3.12.6/lib/puma/configuration.rb:227:in `call'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/puma-3.12.6/lib/puma/server.rb:706:in `handle_request'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/puma-3.12.6/lib/puma/server.rb:476:in `process_client'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/puma-3.12.6/lib/puma/server.rb:334:in `block in run'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/puma-3.12.6/lib/puma/thread_pool.rb:135:in `block in spawn_thread'

/opt/zammad/vendor/bundle/ruby/2.6.0/gems/logging-2.2.2/lib/logging/diagnostic_context.rb:474:in `block in create_with_logging_context'

I, [2020-07-12T07:39:45.513552 #4834-47171128951380]  INFO -- :   Rendering inline template

I, [2020-07-12T07:39:45.514049 #4834-47171128951380]  INFO -- :   Rendered inline template (0.4ms)

I, [2020-07-12T07:39:45.514193 #4834-47171128951380]  INFO -- : Completed 500 Internal Server Error in 719ms (Views: 0.7ms | ActiveRecord: 83.1ms)

I can successfully insert the inline attachment.

This Works Good -

article: {

              subject: "Testing api",

              body: `<b>some</b> message witn inline image <img src="data:image/jpeg;base64,${data.toString('base64')}" />`,

              //body: `<b>some</b> message witn inline image`,

              "content_type": "text/html",

              "type": "note",

              /*attachments: [

                {

                  "filename": "sample.jpg",

                  "data": data.toString('base64'),

                  "mime-type": "text/plain"

                },

              ],*/

            

              note: "API Ticket",

            }

@MrGeneration

Need your help with this please. My roll out is stuck on this.
I must be doing something wrong, some stupid syntax mistake. Your help will be greatly appreciated.

Sorry but I’m not familiar with nodejs and thus cannot help you.

No problem @MrGeneration
Could you please give me some pointers on this error line?

I have checked the ruby code at the given line number. It seems that the error is thrown because code finds no attachment in the array. I think that is unlikely, as an empty array wouldn’t throw error of No Iterative method available.

Or maybe the code finds the array to be null or undefined, for which it throws error.

Or, maybe my base64 data is wrong format or corrupted, which might have corrupted the flow somewhere before.

It will be really helpful if you could give me some suggestions based on the error log on how to proceed debugging.

Thanks a lot in advance for you time.

The issue was appearing with the node-request module. I am not sure why, still debugging that.
It is working fine with axios. Ticket with attachment is getting created.

axios.post(${baseurl}tickets, tickdata, {headers: authHeader});

Noting down the above for any new user stumbling across the same issue.

Glad you could solve your issue.
As I’m not a developer I’m afraid I can’t provide feedback on your no method error.

Ususally this means that Zammad tries to use a method that’s not available in that context. Most of the times this happens if you try to use objects that are nil. So I guess the array or variable it uses in that context simply is empty/nil.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.